java8 Stream 一行實現列表去重
阿新 • • 發佈:2018-12-11
通常情況下,實現列表去重的方式有:
- 建立一個新的result列表,迴圈原列表,如果元素不在result列表中,則放入
- 建立一個HashSet,將列表作為構造引數傳入
下面介紹一種簡單、高效的去重方式,藉助於java8新特性引入的Stream類。程式碼如下:
實體類Person,如果id,name都相同,認為兩個Person相同
package entity; import java.util.Objects; import lombok.Data; @Data public class Person { private Integer id; private String name; public Person(Integer id, String name) { this.id = id; this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return Objects.equals(id, person.id) && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(id, name); } }
測試用例
import java.util.ArrayList; import java.util.stream.Collectors; import java.util.stream.Stream; import entity.Person; public class TestJava8 { public static void main(String[] args) { testCollectors(); } static void testCollectors() { System.out.println(Stream.of(1, 2, 3, 1, 2).distinct().collect(Collectors.toList())); Person p1 = new Person(1, "a"); Person p2 = new Person(2, "b"); Person p3 = new Person(3, "a"); Person p4 = new Person(1, "c"); Person p5 = new Person(1, "a"); //將list轉換為Stream,呼叫distinct方法,然後再講Stream轉換為list System.out.println(Stream.of(p1, p2, p3, p4).distinct().collect(Collectors.toList())); //輸出結果為:[Person(id=1, name=a), Person(id=2, name=b), Person(id=3, name=a), Person(id=1, name=c)] } }