Java中的集合
Java LinkedList指南
Java ArrayList指南
Java中不可變的ArrayList
CopyOnWriteArrayList指南
JavaJava中的多維ArrayList
將迭代器轉換為列表
Java –從列表中獲取隨機項目/元素
用Java對列表進行分區
從Java列表中刪除所有Null
從Java中的列表中刪除所有重複項
檢查Java中兩個列表是否相等
如何使用Java在列表中查找元素
Java列表UnsupportedOperationException
將列表複製到Java中的另一個列表
從列表中刪除所有出現的特定值
將多個元素添加到Java ArrayList
從列表中刪除第一個元素
在Java中迭代列表的方法
Java中兩個列表的交集
如何計算Arraylist中的重複元素
查找Java中兩個列表之間的差異
查找列表或集合的最大/最小
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(value-> value)以獲取Integer流
- 在流上調用max()方法以獲取最大值
- 如果未從max()接收到任何值,則調用orElseThrow()引發異常
3.使用自定義對象查找最小值
為了找到自定義對象的最小值/最大值,我們還可以為首選的排序邏輯提供一個lambda表達式。
首先定義自定義POJO:
class Person {
String name;
Integer age;
// standard constructors, getters and setters
}
我們想要找到年齡最小的Person對象:
@Test
public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda() {
// given
Person alex = new Person("Alex", 23);
Person john = new Person("John", 40);
Person peter = new Person("Peter", 32);
List<Person> people = Arrays.asList(alex, john, peter);
// then
Person minByAge = people
.stream()
.min(Comparator.comparing(Person::getAge))
.orElseThrow(NoSuchElementException::new);
assertEquals("Should be Alex", alex, minByAge);
}
讓我們看一下這個邏輯:
- 在列表上調用stream()方法以從列表中獲取值流
- 在流上調用min()方法以獲取最小值。我們傳遞了一個lambda函數作為比較器,該函數用於確定用於確定最小值的排序邏輯
- 如果未從min ()接收到任何值,則調用orElseThrow()引發異常
4。結論
在這篇快速的文章中,我們探討瞭如何使用Java 8的Stream API中的max()和min()方法從**列表/集合中查找最大值和最小值。**
與往常一樣,該代碼可在Github上使用。