Stream流用於按照物件中某一屬性來對集合去重+簡單資料型別集合的去重
阿新 • • 發佈:2021-08-20
上次對Stream流來進行分組的文章很多人看,想看的可以來這:
Stream流來進行集合分組
這次小編又帶來Stream的去重,話不多數,直接上程式碼:
這是對簡單資料型別的去重
//字串集合進行簡單的去重(其他資料型別去重一樣) List<String> stringList = Arrays.asList("伽羅", "貂蟬", "羋月", "伽羅"); //jdk1.8Stream來去重 stringList = stringList.stream().distinct().collect(Collectors.toList()); System.out.println(JSON.toJSONString(stringList)); /** * 執行結果:["伽羅","貂蟬","羋月"] * */
對物件中的某一個屬性來進行去重:
/**
實體類
*/
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data//lombok簡化程式碼
@AllArgsConstructor
@NoArgsConstructor
public class Hero {
//英雄id
private int id;
//名字
private String name;
//型別
private String type;
}
//進行物件中的某個屬性進行去重 List<Hero> list = Arrays.asList( new Hero(001,"孫悟空","刺客"), new Hero(002,"韓信","刺客"), new Hero(003,"伽羅","射手"), new Hero(004,"阿狸","射手"), new Hero(005,"貂蟬","法師")); //需求:每一個職業只能保留一個英雄 //去重規則,先出現的儲存,後出現的被去掉 list = list.stream() .collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Hero::getType))), ArrayList::new)); System.out.println(JSON.toJSONString(list)); /** * 執行結果:[{"id":1,"name":"孫悟空","type":"刺客"},{"id":3,"name":"伽羅","type":"射手"}, * {"id":5,"name":"貂蟬","type":"法師"}] */
這樣就學會了,直接複製程式碼執行一下,照貓畫虎不是難題,有什麼問題請留言,還請各位大佬批評指正!!!!