public static <T,U,A,R> Collector<T,?,R> mapping(Function<? super T,? extends U> mapper, Collector<? super U,A,R> downstream)
功能和之前的flatmapping类似,但是flatmaping第二个参数downstream数据类型是collector,因此可以多级处理,可以省去对数据的中间处理的中间步骤。详细例子看到前面flatmapping例子。
一个简单的例子:
void test26() {
List<String> strlist = List.of("12","34","5","678","9");
List<String> st = strlist.stream().collect(Collectors.mapping(a -> a+"a", Collectors.toList()));
System.out.println(st.toString());
}
打印输出:[12a, 34a, 5a, 678a, 9a]
和flatmapping一样mapping通常也是和groupingBy和partitioningBy一起使用。看一个官方给的例子:
Map<City, Set<String>> lastNamesByCity
= people.stream().collect(
groupingBy(Person::getCity,
mapping(Person::getLastName,
toSet())));
理解以上代码,简单地说就是以Person对象中的city为分组条件,city为保存分组结果Map的key,取Person对象中的LastName并存放在Set中作为分组结果Map的value。