Java 8————Collectors中的中的joining 方法和mapping方法

x33g5p2x  于2021-12-24 转载在 Java  
字(1.9k)|赞(0)|评价(0)|浏览(627)

先定义好后面做示例要用的数据:

  1. List<User> listUser = new ArrayList<>();
  2. listUser.add(new User("李白", 20, true));
  3. listUser.add(new User("杜甫", 40, true));
  4. listUser.add(new User("李清照", 18, false));
  5. listUser.add(new User("李商隐", 23, true));
  6. listUser.add(new User("杜牧", 39, true));
  7. listUser.add(new User("苏小妹", 16, false));

这个User就是一个普通的Bean对象,有name(姓名)、age(年龄)、gender(性别)三个属性及对应的set/get方法。

joining 方法

从 joining 方法的定义可以看到,这里重载了3个 joining 方法:无参数,1个参数,3个参数。然后从参数命名上看delimiter-分隔符、prefix-前缀、suffix-后缀大约可以猜出参数的作用了,然后再看注释的参数说明

  1. Returns a {@code Collector} that concatenates the input elements,separated by the specified delimiter, with the specified prefix and suffix, in encounter order.

果然如是,下面是举例说明。

将指定的值join成字符串

  1. String join1 = listUser.stream().map(User::getName).collect(Collectors.joining());
  2. System.out.println("join后的结果:" + join1); // 输出==》 李白杜甫李清照李商隐杜牧苏小妹

将List中的用户名join成中间用","分隔的字符串

  1. String join2 = listUser.stream().map(User::getName).collect(Collectors.joining(","));
  2. System.out.println("join后的结果:" + join2); // 输出==》李白,杜甫,李清照,李商隐,杜牧,苏小妹

将List中的用户名join成以前缀是"{",后缀是"}",中间用","分隔的字符串

  1. String join3 = listUser.stream().map(User::getName).collect(Collectors.joining(",", "{", "}"));
  2. System.out.println("join后的结果:" + join3); // 输出==》{李白,杜甫,李清照,李商隐,杜牧,苏小妹}

mapping方法

mapping方法的定义如图

方法有2个参数,Function类型的mapper和Collector类型的downstream。通过注释可以看到方法是通过参数mapper函数来处理List中的每一个数据,然后用downstream来将处理后的数据收集起来。举例说明:

取出List中所有人的姓名放到一个新的List中去

  1. // 定义一个入参为User,返回String的函数
  2. Function<User,String> mapper=(user)->{
  3. return user.getName();
  4. };
  5. List<String> userNames = listUser.stream().collect(Collectors.mapping(mapper, Collectors.toList()));

以上代码再简写一下:

  1. List<String> userNames = listUser.stream().collect(Collectors.mapping((user)->{return user.getName();}, Collectors.toList()));

也可以写成这样:

  1. List<String> userNames = listUser.stream().collect(Collectors.mapping(User::getName, Collectors.toList()));

相关文章

最新文章

更多