java8實現列表去重,java8的stream 和lambda的使用例項
阿新 • • 發佈:2018-12-09
不管我們做安卓開發還是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的新特性。
作者:java小石頭 連結:https://www.jianshu.com/p/63d2db850a8d 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。