java8新特性将list中按指定属性排序过滤重复数据的方法
时间: 2023-05-04 11:02:05 浏览: 130
Java8新增了一个非常方便的方法java.util.stream.Stream,它为我们提供了一些非常有用的方法来对集合进行操作。List集合中按指定属性排序并过滤重复数据也可以通过Stream来实现。
首先,我们需要实现一个Comparator接口,该接口的作用是根据指定的属性来对List集合进行排序。Comparator接口中定义了一个compare方法,我们需要重写该方法并根据自己的需要来实现排序功能。
在排序完成之后,我们还需要使用Stream.distinct()方法来过滤重复的数据,该方法能够将重复的数据过滤掉,只留下不同的数据。
下面是一个示例代码:
```
public class Main {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("Tom", 25));
persons.add(new Person("John", 30));
persons.add(new Person("Peter", 25));
persons.add(new Person("Tom", 28));
persons.add(new Person("Peter", 25));
List<Person> result = persons.stream()
.sorted((p1, p2) -> p1.getName().compareTo(p2.getName()))
.distinct()
.collect(Collectors.toList());
System.out.println(result);
}
}
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 +
'}';
}
}
```
以上代码中,我们先创建了一个Person类,用于存储人员信息,然后创建了一个List集合persons,该集合包含了五个Person对象。接着,我们使用Stream来对该集合进行排序和去重操作,并将结果存入到一个新的List集合中。
在排序操作中,我们使用了一个Lambda表达式来实现对Person对象按照姓名属性进行排序。在去重操作中,我们直接使用了Stream.distinct()来实现。
最终,我们打印出了排序并去重之后的List集合中的内容,运行结果如下:
```
[Person{name='John', age=30}, Person{name='Peter', age=25}, Person{name='Tom', age=25}, Person{name='Tom', age=28}]
```
可以看到,重复的数据被过滤掉了,且排序也符合我们的要求。使用Java8中的Stream和Lambda表达式,使代码更加简洁易读,提高了代码的可维护性和可读性。
阅读全文