不管我们做安卓开发还是javaweb开发,有时候我们会对列表进行去重操作,所谓的列表数据重复,通常体现在列表集合数据中的id属性相同。当然我们通过普通的方式也可以达到去重的效果。但是借助java8新特性可以很方便的实现列表去重,下面就写个小demo简单的演示一下。
主要实现代码
List<Person> persons = new ArrayList(); List<Integer> ids = new ArrayList<>();//用来临时存储person的id persons.add(new Person(1, "name1", 10)); persons.add(new Person(2, "name2", 21)); persons.add(new Person(5, "name5", 55)); persons.add(new Person(3, "name3", 34)); persons.add(new Person(1, "name1", 10)); List<Person> personList = persons.stream().filter(// 过滤去重 v -> { boolean flag = !ids.contains(v.getId()); ids.add(v.getId()); return flag; } ).collect(Collectors.toList()); System.out.println(personList);
运行后的打印如下.可以看出id为1时的重复数据已经被过滤掉了
[Person{id=1, name='name1', age=10},Person{id=2, name='name2', age=21}, Person{id=5, name='name5', age=55}, Person{id=3, name='name3', age=34}]
person类的代码如下
package com.qcl.demo;/** * Created by qcl on 2018/3/26. */public class Person { private int id; private String name; private int age; public Person() { } public Person(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; }}
这只是java8在我们开发时比较常用的一个操作。
如下面这个例子使用也比较普遍
获取person集合中的所有大于18周岁,并排序List<Person> persons = new ArrayList();persons.add(new Person(1, "name1", 10));persons.add(new Person(2, "name2", 21));persons.add(new Person(5, "name5", 55));persons.add(new Person(3, "name3", 34));persons.add(new Person(4, "name4", 6));persons.stream() .filter(p -> p.getAge() >= 18)//获取所有18岁以上的用户 .sorted(Comparator.comparing(Person::getAge))//依年纪升序排序 .sorted(Comparator.comparing(Person::getAge).reversed())//依年纪降序排序 .collect(Collectors.toList()) .forEach(System.out::println);boolean isAllAdult = persons.stream(). allMatch(p -> p.getAge() > 18);System.out.println("是否所有的用户都大于18岁" + isAllAdult);
总结:java8的使用,对于我们操作集合,数组提供了很大的便利。建议大家有机会多去了解下java8的新特性。
文章转载于:https://www.jianshu.com/p/63d2db850a8d
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~