定制开发Java 8 新特性|Collectors.joining() 详解


方法定义

Java 8 流 ( ) 收集器 ( Collectors ) 中的 joining() 定制开发方法会返回一个 Collectors 实例,定制开发方便在流收集器上的链式操作。

Collectors.joining() 定制开发方法以遭遇元素的顺序拼接元素。定制开发我们可以传递可选的拼接字符串、前缀和后缀。

假设我们的流中有四个元素 ["A","B","C","D"],那么我们就可以按照以下方式来收集它们。

无参方法

joinning() 无参数方法会返回一个 Collectors 实例,并且以空字符串 ( "" ) 来拼接收集到的所有元素

  1. package com.sjh.test.java8;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. public class JoiningTest1 {
  6.     public static void main(String[] args) {
  7.         List<String> list = Arrays.asList("1","2","3","4");
  8.         String result= list.stream().collect(Collectors.joining());
  9.         System.out.println(result);
  10.     }
  11. }

运行结果:

  1. /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.JoiningTest1
  2. 1234
  3. Process finished with exit code 0

单个参数

joining(CharSequence delimiter) 接受一个参数字符串序列作为拼接符,并返回一个 Collectors 实例。假如我们传递的拼接符为 "-" 。那么输出结果为 1-2-3-4

  1. package com.sjh.test.java8;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. public class JoiningTest2 {
  6.     public static void main(String[] args) {
  7.         List<String> list = Arrays.asList("1","2","3","4");
  8.         String result= list.stream().collect(Collectors.joining("-"));
  9.         System.out.println(result);
  10.     }
  11. }

运行结果:

  1. /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.JoiningTest2
  2. 1-2-3-4
  3. Process finished with exit code 0

多个参数

joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 方法接受一个字符串序列作为拼接符,并在拼接完成后添加传递的前缀和后缀。假如我们传递的分隔符为 "-",前缀为 "[" , 后缀为 "]" 。那么输出结果为 [1-2-3-4]

  1. package com.sjh.test.java8;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. public class JoiningTest3 {
  6.     public static void main(String[] args) {
  7.         List<String> list = Arrays.asList("1","2","3","4");
  8.         String result= list.stream().collect(Collectors.joining("-", "[", "]"));
  9.         System.out.println(result);
  10.     }
  11. }

运行结果:

  1. /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.JoiningTest3
  2. [1-2-3-4]
  3. Process finished with exit code 0

如果流中的数据是字符串

使用 joinning() 的三种重载方法来拼接字符串

  1. package com.sjh.test.java8;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. public class JoniningDemo1 {
  6.     public static void main(String[] args) {
  7.         List<String> list = Arrays.asList("JayLa","LayMan","KangKang","XinYI");
  8.         String resultStr = list.stream().collect(Collectors.joining());
  9.         System.out.println(resultStr);
  10.         resultStr= list.stream().collect(Collectors.joining(","));
  11.         System.out.println(resultStr);
  12.         resultStr= list.stream().collect(Collectors.joining("-","[","]"));
  13.         System.out.println(resultStr);
  14.     }
  15. }

运行结果:

  1. /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.JoniningDemo1
  2. JayLaLayManKangKangXinYI
  3. JayLa,LayMan,KangKang,XinYI
  4. [JayLa-LayMan-KangKang-XinYI]
  5. Process finished with exit code 0

如果流中的数据是对象

首先,我们创建一个 Person 类

  1. package com.sjh.test.java8.bean;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Person {
  5.     private String name;
  6.     private int age;
  7.     public Person(String name, int age) {
  8.         this.name = name;
  9.         this.age = age;
  10.     }
  11.     public String getName() {
  12.         return name;
  13.     }
  14.     public int getAge() {
  15.         return age;
  16.     }
  17.     public static List<Person> getList() {
  18.         List<Person> list = new ArrayList<>();
  19.         list.add(new Person("JayLa", 23));
  20.         list.add(new Person("LayMan", 20));
  21.         list.add(new Person("KangKang", 25));
  22.         list.add(new Person("XinYi", 18));
  23.         return list;
  24.     }
  25. }

然后创建一个 Person 对象流

  1. package com.sjh.test.java8;
  2. import com.sjh.test.java8.bean.Person;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. public class JoiningDemo2 {
  6.     public static void main(String[] args) {
  7.         List<Person> list = Person.getList();
  8.         System.out.println("--Join person name--");
  9.         String result= list.stream().map(p -> p.getName()).collect(Collectors.joining());
  10.         System.out.println(result);
  11.         result= list.stream().map(p -> p.getName()).collect(Collectors.joining("|"));
  12.         System.out.println(result);
  13.         result= list.stream().map(p -> p.getName()).collect(Collectors.joining("-","[","]"));
  14.         System.out.println(result);
  15.         System.out.println("--Join person age--");
  16.         result= list.stream().map(p -> String.valueOf(p.getAge())).collect(Collectors.joining());
  17.         System.out.println(result);
  18.         result= list.stream().map(p -> String.valueOf(p.getAge())).collect(Collectors.joining("|"));
  19.         System.out.println(result);
  20.         result= list.stream().map(p -> String.valueOf(p.getAge())).collect(Collectors.joining("-","[","]"));
  21.         System.out.println(result);
  22.         System.out.println("--Join person name-age--");
  23.         result= list.stream().map(p -> p.getName()+"-" + p.getAge()).collect(Collectors.joining("|"));
  24.         System.out.println(result);
  25.         result= list.stream().map(p -> p.getName()+"-" + p.getAge()).collect(Collectors.joining("|","[","]"));
  26.         System.out.println(result);
  27.     }
  28. }

运行结果:

  1. /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.JoiningDemo2
  2.  
  3. --Join person name--
  4. JayLaLayManKangKangXinYi
  5. JayLa|LayMan|KangKang|XinYi
  6. [JayLa-LayMan-KangKang-XinYi]
  7.  --Join person age--
  8. 23202518
  9. 23|20|25|18
  10. [23-20-25-18]
  11.  --Join person name-age--
  12. JayLa-23|LayMan-20|KangKang-25|XinYi-18
  13. [JayLa-23|LayMan-20|KangKang-25|XinYi-18]
  14. Process finished with exit code 0

end

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发