一、使用distinct()
Lambda表达式可以从集合中筛选出唯一的元素,使用distinct()方法可以帮助消除Lambda中的重复项。该方法会找出集合中的不同元素,并返回唯一的元素集合。ArrayListnumbers = 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,重复元素自动去重。ArrayListnumbers = 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 + '}'; } } Listpersons = Arrays.asList(new Person("Tom", 20), new Person("Tom", 25), new Person("Jack", 30), new Person("Kate", 30)); Map > uniquePersonNamesByAge = persons.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toSet())));
在上面的代码中,我们创建了Person类,使用groupingBy()方法按照年龄进行分组,同时使用mapping()和toSet()方法将各组中的姓名去重,最终uniquePersonNamesByAge包含了按年龄分组的所有唯一姓名。
四、使用HashSet
我们也可以使用一个HashSet集合来帮助消除Lambda中的重复项。ArrayListnumbers = new ArrayList<>(Arrays.asList(1, 2, 3, 2, 4, 5, 1)); Set uniqueNumbers = new HashSet<>(numbers);
在上面的代码中,我们创建一个整数类型的HashSet,将原始的集合中的元素添加到HashSet中。由于HashSet不允许重复元素,因此所有重复元素都被自动去除,最终uniqueNumbers包含集合中的所有唯一元素。