查找最小或者最大日期
要从日期流中获取最大或者最小日期,我们可以使用“Comparator.comparing(LocalDate::toEpochDay)”比较器。toEpochDay()
函数简单地增加日期的天数,其中第 0 天是 1970-01-01
。
LocalDate start = LocalDate.now(); LocalDate end = LocalDate.now().plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); // 创建日期流 List<LocalDate> dates = Stream.iterate(start, date -> date.plusDays(1)) .limit(ChronoUnit.DAYS.between(start, end)) .collect(Collectors.toList()); // 获取最小或者最大日期 LocalDate maxDate = dates.stream() .max( Comparator.comparing( LocalDate::toEpochDay ) ) .get(); LocalDate minDate = dates.stream() .min( Comparator.comparing( LocalDate::toEpochDay ) ) .get(); System.out.println("maxDate = " + maxDate); System.out.println("minDate = " + minDate);
根据对象属性找出最大或者最小的对象
对象比较首先涉及创建我们自己的自定义比较器。
例如,如果我想从 Employee
对象流中获取最年轻的员工,那么我的比较器将类似于 Comparator.comparing(Employee::getAge)
。
现在使用这个比较器来获取最大或者最小员工对象。
找出年龄最大或者最小的员工。
List<Employee> employees = new ArrayList<Employee>(); employees.add(new Employee(1, "JackLi", 36)); employees.add(new Employee(2, "JackLi", 46)); employees.add(new Employee(3, "BobRobert", 52)); Comparator<Employee> comparator = Comparator.comparing( Employee::getAge ); // Get Min or Max Object Employee minObject = employees.stream().min(comparator).get(); Employee maxObject = employees.stream().max(comparator).get(); System.out.println("minObject = " + minObject); System.out.println("maxObject = " + maxObject);
Employee
对象是:
class Employee { private int id; private String name; private int age; public Employee(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { StringBuilder str = null; str = new StringBuilder(); str.append("Id:- " + getId() + " Name:- " + getName() + " Age:- " + getAge()); return str.toString(); } }
查找最小或者最大数
要从数字流中找到最小和最大数字,请像比较器一样使用“Comparator.comparing(Integer::valueOf)”。
下面的例子是整数流。
// 获取最大或者最小的数 Integer maxNumber = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9) .max(Comparator.comparing(Integer::valueOf)) .get(); Integer minNumber = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9) .min(Comparator.comparing(Integer::valueOf)) .get(); System.out.println("maxNumber = " + maxNumber); System.out.println("minNumber = " + minNumber);
欢迎来到之路教程(on itroad-com)
查找最小或者最大字符或者字符串
要从字符流中查找最小和最大字符串或者字符,请使用类似比较器的 Comparator.comparing( String::valueOf )
。
// Get Min or Max String/Char String maxChar = Stream.of("H", "T", "D", "I", "J") .max(Comparator.comparing(String::valueOf)) .get(); String minChar = Stream.of("H", "T", "D", "I", "J") .min(Comparator.comparing(String::valueOf)) .get(); System.out.println("maxChar = " + maxChar); System.out.println("minChar = " + minChar);
日期:2020-09-17 00:10:06 来源:oir作者:oir