从Collection或者List中查找最大/最小值(对象)
1. 介绍
如何通过 Java8 中强大的stream API 从给定列表/集合中查找最小/最大值。
2. 在整数列表中查找最大值
我们可以通过 java.util.stream 接口提供的 max() 方法
@Test
public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() {
// given
List<Integer> listOfIntegers = Arrays.asList(1, 2, 3, 4, 56, 7, 89, 10);
Integer expectedResult = 89;
// then
Integer max = listOfIntegers
.stream()
.mapToInt(v -> v)
.max().orElseThrow(NoSuchElementException::new);
assertEquals("Should be 89", expectedResult, max);
}
让我们仔细看看代码:
- 在列表中调用 stream() 方法从列表中获取值流
- 在流上调用 mapToInt() 以获取整数流
- 在流上调用 max() 方法以获得最大值
如果没有从最大值收到,则调用 orElseXrow() 抛出一个异常
3. 查找自定义对象的最小值
为了查找自定义对象上最小/最大值,我们可以通过对lambda 表达式编写排序逻辑来实现。class Person { String name; Integer age; // standard constructors, getters and setters }
```
@Test
public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda() {
// given
Person alex = new Person("Alex", 23);
Person john = new Person("John", 40);
Person peter = new Person("Peter", 32);
List
// then
Person minByAge = people
.stream()
.min(Comparator.comparing(Person::getAge))
.orElseThrow(NoSuchElementException::new);
assertEquals("Should be Alex", alex, minByAge);
}
```
让我们来看看这个逻辑:
- 在列表中调用 stream() 方法从列表中获取值流
- 在流上调用 min() 方法以获得最低值。我们正在传递一个lamda函数作为比较器,这是用来决定最低值的排序逻辑
- 如果从 min() 未收到任何值,则调用 orElseThrow 抛出一个异常
4.结尾
在这篇快速文章中,我们探讨了如何使用 Java 8 的 Stream API 中的 max() 和 min() 方法从列表/集合中查找最大值和最小值。
正文到此结束