Java8集合自定义去重
在开发过程中,我们经常会遇到需要对集合进行去重的情况,而Java8的Stream API为我们提供了一种简洁高效的方式来实现集合去重操作。本文将介绍如何利用Java8的Stream API对集合进行自定义去重操作,并给出代码示例。
Stream API简介
Java8引入了Stream API,它是对集合对象进行处理的工具。通过Stream API,我们可以实现对集合的过滤、映射、排序等操作,提高代码的可读性和简洁性。Stream API主要包括两种操作:中间操作和终结操作。中间操作用于对数据进行处理和转换,终结操作用于触发处理过程并获取最终结果。
自定义去重操作
在Java8中,我们可以通过Stream API的distinct()方法对集合进行去重。但是有时我们需要根据自定义规则进行去重,这时就需要自定义去重操作。下面是一个示例,演示了如何实现对集合进行自定义去重操作。
import java.util.ArrayList;
import java.util.List;
public class CustomDistinct {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("orange");
list.add("banana");
list.add("apple");
list.add("pear");
list.stream()
.distinct()
.forEach(System.out::println);
}
}
上面的代码展示了如何利用Stream API的distinct()方法对集合进行去重。在这个例子中,我们使用了一个简单的字符串集合,通过distinct()方法去除了重复元素,并通过forEach()方法输出去重后的结果。
自定义去重规则
有时候我们需要根据自定义规则对集合进行去重,比如根据对象的某个属性进行去重。下面是一个示例,演示了如何根据对象的某个属性进行去重操作。
import java.util.ArrayList;
import java.util.List;
public class CustomDistinct {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("Alice", 25));
list.add(new Person("Bob", 30));
list.add(new Person("Alice", 25));
list.add(new Person("David", 35));
list.stream()
.filter(distinctByKey(Person::getName))
.forEach(System.out::println);
}
static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
static 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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
}
上面的代码中,我们定义了一个Person类,包含姓名和年龄属性。通过distinctByKey()方法,我们可以根据Person对象的姓名属性进行去重操作。在forEach()方法中,通过传入distinctByKey(Person::getName)来指定去重规则,根据姓名属性进行去重处理。
总结
通过本文的介绍,我们了解了如何利用Java8的Stream API对集合进行自定义去重操作。首先我们讨论了Stream API的基本概念,然后给出了对集合进行去重的示例代码。接着,我们介绍了如何根据自定义规则对集合进行去重操作,并给出了根据对象属性进行去重的代码示例。通过这些示例,我们可以更好地利用Java8的Stream API进行集合去重操作,提高代码的简洁性和可读性。希望本文对你有所帮助,谢谢阅读!
关系图
erDiagram
Person ||--o| name : string
Person ||--o| age : int
参考资料
- [Java Stream API Guide](
- [Oracle Java Documentation](