1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【Java 8 新特性】Java 8 Collectors:reducing 示例(List分组取最值)

【Java 8 新特性】Java 8 Collectors:reducing 示例(List分组取最值)

时间:2023-06-15 11:23:41

相关推荐

【Java 8 新特性】Java 8 Collectors:reducing 示例(List分组取最值)

简介

Java 8Collectors.reducing利用Comparator(比较器)BinaryOperator(二元运算符)进行减少流中的元素。

Collectors.reducing返回带有Optional数据的Collector(收集器)

Collectors.reducingJavaDoc的方法语法如下。

public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op)

Collectors.reducing返回一个Optional类的收集器。

我们需要传递BinaryOperator(二元运算符)BinaryOperator.maxByBinaryOperator.minBy方法。

BinaryOperator(二元运算符)Comparator(比较器)作为参数。

根据该Comparator(比较器)BinaryOperator(二元运算符),流元素被减少,最后可以作为一个组来收集。

使用场景

Collectors.reducing主要用于取List列表中的某一类型中的最大或最小的一个元素,例如下列代码,取出各个班级中年龄最大的学生信息。

注:如果最值相同,取列表顺序最先出现的一个。

代码示例

Student.java

package com.concretepage.util;public class Student {private String name;private Integer age;private String className;public Student(String name,Integer age, String className){this.name=name;this.age=age;this.className = className;}public String getName() {return name;}public Integer getAge() {return age;}public String getClassName() {return className;}}

ReducingDemo.java

package com.concretepage.util;import java.util.Arrays;import parator;import java.util.List;import java.util.Map;import java.util.Optional;import java.util.function.BinaryOperator;import java.util.stream.Collectors;public class ReducingDemo {public static void main(String[] args) {Student s1 = new Student("Shyam", 22,"A");Student s2 = new Student("Ram",23,"A");Student s3 = new Student("Mohan",22,"B");Student s4 = new Student(null,21,"B");List<Student> list = Arrays.asList(s1,s2,s3,s4);Comparator<Student> ageComparator = paring(Student::getAge); Map<String, Optional<Student>> eldestByClass = list.stream().collect(Collectors.groupingBy(Student::getClassName, Collectors.reducing(BinaryOperator.maxBy(ageComparator))));eldestByClass.forEach((k,v)->System.out.println("Class:"+k+" Age:"+((Optional<Student>)v).get().getAge()+" Name:"+((Optional<Student>)v).get().getName()));}}

输出

Class:A Age:23 Name:RamClass:B Age:22 Name:Mohan

参考文献

【1】Java 8 Collectors: reducing Example

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。