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

這樣就學會了,直接復制代碼運行一下,照貓畫虎不是難題,有什么問題請留言,還請各位大佬批評指正!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM