Java Lambda Distinct 指定字段
在Java 8之后,引入了Lambda表达式和Stream API,使得处理集合数据变得更加简洁和高效。其中,Distinct操作可以用于移除重复的元素,使得集合中的元素具有唯一性。本文将介绍如何使用Lambda表达式和Stream API中的Distinct操作来根据指定字段进行去重。
Lambda 表达式的简介
Lambda表达式是Java中的一种匿名函数,可以将其作为参数传递给方法或存储在变量中。Lambda表达式省略了匿名方法的定义,使得代码更加简洁和易读。Lambda表达式使用箭头符号(->)将参数列表和函数体分隔开来,如下所示:
(parameter1, parameter2, ..., parameterN) -> {
// Lambda 表达式的函数体
}
Lambda表达式的参数列表可以为空,或者包含一个或多个参数。函数体可以是一个表达式或一个代码块。如果函数体只有一条语句,则可以省略花括号。Lambda表达式可以通过上下文推断参数的类型,也可以显式指定参数的类型。
Stream API 的简介
Stream API 是Java 8中用于处理集合数据的新特性。Stream(流)表示一系列的元素,可以进行各种操作,例如过滤、映射、排序等。Stream API 提供了丰富的函数式接口和方法,使得处理集合数据变得更加简洁和高效。
使用 Lambda 表达式和 Stream API 进行去重
在处理集合数据时,我们经常遇到需要去除重复元素的情况。Stream API 中的Distinct操作可以用于移除重复的元素。默认情况下,Distinct操作根据元素的equals方法判断元素是否相等。但是,有时我们需要根据指定字段进行去重,这就需要使用Lambda表达式来指定判断元素相等的字段。
下面是一个示例代码,演示了如何使用Lambda表达式和Stream API对集合进行去重,并根据指定字段判断元素相等:
import java.util.ArrayList;
import java.util.List;
public class DistinctExample {
public static void main(String[] args) {
// 创建一个包含重复元素的集合
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 20));
persons.add(new Person("Bob", 30));
persons.add(new Person("Alice", 20));
persons.add(new Person("Charlie", 40));
// 使用 Lambda 表达式和 Stream API 进行去重
List<Person> distinctPersons = persons.stream()
.distinct()
.toList();
// 打印去重后的集合
System.out.println(distinctPersons);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写 equals 方法,根据指定字段判断元素相等
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return name.hashCode() + age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
在上述示例代码中,我们创建了一个包含重复元素的Person集合。然后,使用Lambda表达式和Stream API的Distinct操作进行去重。为了根据指定字段判断元素相等,我们在Person类中重写了equals方法,并根据name和age字段进行判断。最后,打印去重后的集合,输出结果为:
[Person{name='Alice', age=20}, Person{name='Bob', age=30}, Person{name='Charlie', age=40}]
总结
本文介绍了如何使用Lambda表达式和Stream API中的Distinct操作对集合进行去重,并根据指定字段判断元素相等。通过使用Lambda表达式,我们可以简洁地指定判断元素相等的字段