1. 程式人生 > 其它 >Stream流用於按照物件中某一屬性來對集合去重+簡單資料型別集合的去重

Stream流用於按照物件中某一屬性來對集合去重+簡單資料型別集合的去重

上次對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":"法師"}]
         */

這樣就學會了,直接複製程式碼執行一下,照貓畫虎不是難題,有什麼問題請留言,還請各位大佬批評指正!!!!