Collectors.mapping() 你的名字 2021-09-22 02:50 745阅读 0赞 ## Collectors.mapping() ## > `Java 8` 流的新类 `java.util.stream.Collectors` 实现了 `java.util.stream.Collector` 接口,同时又提供了大量的方法对流 ( `stream` ) 的元素执行 `map` `and` `reduce` 操作,或者统计操作。 `Collectors.mapping()` 一般用于多重 `map and reduce` 中。 `Java` 文档中描述的原型如下 //第一个参数用于 map ,第二个参数用于 reduce mapping(Function<? super T,? extends U> mapper, Collector<? super U,A,R> downstream) **作用:** * 流式操作可进行很多的操作 * 过滤 `fliter` * 运算`map` * 去重`distinct` * …… * 经过N多的运算、筛选、排序、操作……返回我们需要的集合 ### mappingExample代码 ### ##### 首先一个创建Bean ##### class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ##### 简单测试使用mapping ##### @Test public void mappingExample() { List<Person> list = new ArrayList<>(); list.add(new Person("Ram", 30)); list.add(new Person("Shyam", 20)); list.add(new Person("Shiv", 20)); list.add(new Person("Mahesh", 30)); String nameByAge = list.stream().collect(Collectors.mapping(Person::getName, Collectors.joining(",", "[", "]"))); System.out.println(nameByAge); nameByAge = list.stream().map(person -> person.getName()).collect(Collectors.joining(",", "[", "]")); System.out.println(nameByAge); } /* 运行结果: [Ram,Shyam,Shiv,Mahesh] [Ram,Shyam,Shiv,Mahesh] 可以发现达到相同的效果 */ ##### 使用`Collectors.groupingBy`方法进行分组 ##### @Test public void mappingExample() { List<Person> list = new ArrayList<>(); list.add(new Person("Ram", 30)); list.add(new Person("Shyam", 20)); list.add(new Person("Shiv", 20)); list.add(new Person("Mahesh", 30)); Map<Integer, String> nameByAgeMap = list.stream().collect( Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.joining(",", "[", "]")))); nameByAgeMap.forEach((k, v) -> System.out.println("Age:" + k + " Persons: " + v)); } /* 运行结果: Age:20 Persons: [Shyam,Shiv] Age:30 Persons: [Ram,Mahesh] 封装为Map后返回 */
还没有评论,来说两句吧...