Java Lambda Stream Distinct() 任意键 [复制]

作者:编程家 分类: java 时间:2025-06-23

使用Java Lambda中的Stream的distinct()方法可以根据任意键对数据进行去重操作。这个方法在处理集合中的重复元素时非常有用,它能够基于指定的键值对进行去重,并返回一个去重后的新集合。在本文中,我将介绍distinct()方法的使用方式,并给出一些实例代码来帮助读者更好地理解。

使用distinct()方法去重

在Java Lambda中,Stream是一种非常强大的处理集合数据的工具。Stream提供了一系列的方法来对集合进行过滤、映射、排序等操作。而distinct()方法则是Stream中用于去重的一个重要方法。

distinct()方法的使用非常简单,它没有任何参数,只需要在Stream对象上调用该方法即可。该方法会返回一个新的Stream对象,其中包含了去重后的元素。下面是一个简单的例子,演示了distinct()方法的使用:

java

import java.util.Arrays;

import java.util.List;

public class DistinctExample {

public static void main(String[] args) {

List names = Arrays.asList("John", "Jane", "John", "Doe", "Jane");

List distinctNames = names.stream()

.distinct()

.collect(Collectors.toList());

System.out.println(distinctNames);

}

}

在上面的例子中,我们有一个包含了一些重复元素的字符串列表names。通过使用Stream的distinct()方法,我们可以很容易地去除重复的元素。最后,我们使用collect()方法将去重后的元素收集到一个新的列表中,并打印出来。输出结果如下:

[John, Jane, Doe]

根据任意键进行去重

在上面的例子中,我们是根据字符串的值来进行去重的。但是在实际应用中,我们可能需要根据对象的某个属性进行去重。Java Lambda的distinct()方法提供了这样的功能,它可以根据我们指定的键来进行去重。

下面是一个示例代码,演示了如何根据对象的某个属性进行去重:

java

import java.util.Arrays;

import java.util.List;

import java.util.stream.Collectors;

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;

}

}

public class DistinctByKeyExample {

public static void main(String[] args) {

List people = Arrays.asList(

new Person("John", 20),

new Person("Jane", 25),

new Person("John", 30),

new Person("Doe", 35),

new Person("Jane", 40)

);

List distinctPeople = people.stream()

.filter(distinctByKey(Person::getName))

.collect(Collectors.toList());

System.out.println(distinctPeople);

}

public static Predicate distinctByKey(Function keyExtractor) {

Map seen = new ConcurrentHashMap<>();

return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;

}

}

在上面的例子中,我们有一个包含了一些Person对象的列表people。每个Person对象都有一个name属性。我们使用了Java 8的方法引用来指定根据name属性进行去重。通过定义一个distinctByKey()方法,我们可以根据指定的键来进行去重操作。最后,我们使用collect()方法将去重后的Person对象收集到一个新的列表中,并打印出来。输出结果如下:

[Person{name='John', age=20}, Person{name='Jane', age=25}, Person{name='Doe', age=35}]

在本文中,我们介绍了Java Lambda中Stream的distinct()方法的使用方式。通过使用distinct()方法,我们可以轻松地对集合中的重复元素进行去重操作。此外,我们还演示了如何根据任意键进行去重,以满足实际应用中的需求。希望通过本文的介绍,读者能够更好地理解distinct()方法的用法,并能够在实际项目中灵活运用。