0


Java 8 新特性|Collectors.joining() 详解

方法定义

Java 8 流 ( stream ) 收集器 ( Collectors ) 中的

  1. joining()

方法会返回一个

  1. Collectors

实例,方便在流收集器上的链式操作。

  1. Collectors.joining()

方法以遭遇元素的顺序拼接元素。我们可以传递可选的拼接字符串、前缀和后缀。

假设我们的流中有四个元素

  1. ["A","B","C","D"]

,那么我们就可以按照以下方式来收集它们。

无参方法

  1. joinning()

无参数方法会返回一个

  1. Collectors

实例,并且以空字符串 (

  1. ""

) 来拼接收集到的所有元素

  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

单个参数

  1. joining(CharSequence delimiter)

接受一个参数字符串序列作为拼接符,并返回一个

  1. Collectors

实例。假如我们传递的拼接符为

  1. "-"

。那么输出结果为 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

多个参数

  1. joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

方法接受一个字符串序列作为拼接符,并在拼接完成后添加传递的前缀和后缀。假如我们传递的分隔符为

  1. "-"

,前缀为

  1. "["

, 后缀为

  1. "]"

。那么输出结果为

  1. [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

如果流中的数据是字符串

使用

  1. 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

如果流中的数据是对象

首先,我们创建一个

  1. 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. }

然后创建一个

  1. 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. --Join person name--
  3. JayLaLayManKangKangXinYi
  4. JayLa|LayMan|KangKang|XinYi
  5. [JayLa-LayMan-KangKang-XinYi]
  6. --Join person age--
  7. 23202518
  8. 23|20|25|18
  9. [23-20-25-18]
  10. --Join person name-age--
  11. JayLa-23|LayMan-20|KangKang-25|XinYi-18
  12. [JayLa-23|LayMan-20|KangKang-25|XinYi-18]
  13. Process finished with exit code 0

end

标签: 字符串 stream jdk

本文转载自: https://blog.csdn.net/sun2012930/article/details/116024342
版权归原作者 Java小技巧 所有, 如有侵权,请联系我们删除。

“Java 8 新特性|Collectors.joining() 详解”的评论:

还没有评论