一、使用distinct()
Lambda表達式可以從集合中篩選出唯一的元素,使用distinct()方法可以幫助消除Lambda中的重複項。該方法會找出集合中的不同元素,並返回唯一的元素集合。
ArrayList numbers = new ArrayList(Arrays.asList(1, 2, 3, 2, 4, 5, 1)); List distinctNumbers = numbers.stream().distinct().collect(Collectors.toList());
在上面的代碼中,我們創建了一個整數類型的集合,並使用distinct()方法來查找集合中的不同元素。最終將其收集到列表中。結果是[1, 2, 3, 4, 5], 集合中所有的重複元素都被消除了。
二、使用toSet()
toSet()方法是將元素添加到Set集合中,而Set集合不允許重複元素存在,因此重複元素在添加時會被自動去除。通過List的stream()方法,將List轉換為Stream,然後通過collect()方法將Stream轉換為Set,重複元素自動去重。
ArrayList numbers = new ArrayList(Arrays.asList(1, 2, 3, 2, 4, 5, 1)); Set uniqueNumbers = numbers.stream().collect(Collectors.toSet());
在上面的代碼中,我們將一個整數類型的集合轉換為了Set,重複元素已被消除,最終uniqueNumbers包含了集合中所有的唯一元素。
三、使用groupingBy()和collect()
如果我們需要將集合中的元素按照某個屬性進行分組,同時去除重複元素,那麼我們可以使用groupingBy()和collect()方法。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } } List persons = Arrays.asList(new Person("Tom", 20), new Person("Tom", 25), new Person("Jack", 30), new Person("Kate", 30)); Map<Integer, Set> uniquePersonNamesByAge = persons.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toSet())));
在上面的代碼中,我們創建了Person類,使用groupingBy()方法按照年齡進行分組,同時使用mapping()和toSet()方法將各組中的姓名去重,最終uniquePersonNamesByAge包含了按年齡分組的所有唯一姓名。
四、使用HashSet
我們也可以使用一個HashSet集合來幫助消除Lambda中的重複項。
ArrayList numbers = new ArrayList(Arrays.asList(1, 2, 3, 2, 4, 5, 1)); Set uniqueNumbers = new HashSet(numbers);
在上面的代碼中,我們創建一個整數類型的HashSet,將原始的集合中的元素添加到HashSet中。由於HashSet不允許重複元素,因此所有重複元素都被自動去除,最終uniqueNumbers包含集合中的所有唯一元素。
原創文章,作者:RAYH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/142439.html