四、操作链:collectingAndThen 五、操作后聚合:mapping 六、聚合后操作:reducing 七、工作中常用的一些组合操作: 1. 分组后操作: 2. 分组后记数 3. 分组后求和 Collectors,可以说是Java8的最常用操作了,用来实现对队列的各种操作,包括:分组、聚合等,官方描述是: Implementations of {@link Collector} that ...
/*使用Collectors.toMap形式*/Map result= peopleList.stream().collect(Collectors.toMap(p -> p.name, p -> p.age, (k1, k2) ->k1));//其中Collectors.toMap方法的第三个参数为键值重复处理策略,如果不传入第三个参数,当有相同的键时,会抛出一个IlleageStateException。//或者Map<Integer, String> res...
java List<String> names = dishes.stream().map(Dish::getName).collect(toList()); 将原来的Stream映射为一个单元素流,然后收集为List。 toSet java Set<Type> types = dishes.stream().map(Dish::getType).collect(Collectors.toSet()); 将Type收集为一个set,可以去重复。 toMap java Map<Type, ...
java8的collect方法的详细介绍: collect:收集器 Collector作为collect方法的参数 Collector是一个接口,它是一个可变的汇聚操作,将输入元素累积到一个可变的结果容器中;它会在所有元素都处理完毕后,将累积的结果转换为一个最终的表示(这是一个可选操作);它支持串行与并行两种方式执行。 Collectors本身提供了关于Collector...
上面几个几乎是最常用的收集器了,也基本够用了。但作为初学者来说,理解需要时间。想要真正明白为什么这样可以做到收集,就必须查看内部实现,可以看到,这几个收集器都是基于java.util.stream.Collectors.CollectorImpl,也就是开头提到过了Collector的一个实现类。后面自定义收集器会学习具体用法。
java8中的stream操作,分为中间操作和终端操作,在终端操作中,前面也看到了归约的方式,这篇主要是也说的归约操作的方式collect,收集器操作,收集器操作,可以当做是一种更高级的归约操作; 先看下stream中的collect操作 第一个,是传入3个参数的抽象方法, 第二个只有一个参数的先看下stream中的collect操作Collectors...
Map<Integer, Student> map = list.stream().collect(Collectors.toMap(Student::getId, student -> student)); map value 为对象中的属性 Map<Integer, String> map = list.stream().collect(Collectors.toMap(Student::getId, Student::getName));
我们创建了一个包含多个Person对象的列表,然后使用Stream API对这个列表进行操作。我们通过filter方法过滤出name属性不为空的Person对象,然后通过map方法将这些Person对象转换为name属性的值,最后使用collect(Collectors.toList())将这些值收集到一个新的列表中。
上面几个几乎是最常用的收集器了,也基本够用了。但作为初学者来说,理解需要时间。想要真正明白为什么这样可以做到收集,就必须查看内部实现,可以看到,这几个收集器都是基于java.util.stream.Collectors.CollectorImpl,也就是开头提到过了Collector的一个实现类。后面自定义收集器会学习具体用法。
1 Collector in Action 下面我们通过这个根据type来对task进行分组的例子,来体验Collector的作用。在java8中,我们可以像下面这样来实现根据TaskType分组。 private static Map<TaskType, List<Task>> groupTasksByType(List<Task> tasks) { return tasks.stream().collect(Collectors.groupingBy(task -> task.getType...