第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

通過(guò)從具有不同對(duì)象的重復(fù)元素的列表中刪除對(duì)象來(lái)創(chuàng)建新的不同列表

通過(guò)從具有不同對(duì)象的重復(fù)元素的列表中刪除對(duì)象來(lái)創(chuàng)建新的不同列表

qq_花開(kāi)花謝_0 2021-06-09 17:14:57
如果該列表具有具有相同元素的唯一對(duì)象,如何從列表中刪除這些對(duì)象?static class UserDTO {        private String name;        private String email;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public String getEmail() {            return email;        }        public void setEmail(String email) {            this.email = email;        }    }        UserDTO u1 = new UserDTO();        u1.setEmail("alex@gmail.com");        u1.setName("one");        UserDTO u2 = new UserDTO();        u2.setEmail("andy@gmail.com");        u2.setName("two");        UserDTO u3 = new UserDTO();        u3.setEmail("andy@gmail.com");        u3.setName("three");        UserDTO u4 = new UserDTO();        u4.setEmail("ankit@gmail.com");        u4.setName("four");        UserDTO u5 = new UserDTO();        u5.setEmail("amar@gmail.com");        u5.setName("five");        List<UserDTO> users = new ArrayList<>();         users.add(u1);        users.add(u2);        users.add(u3);        users.add(u4);        users.add(u5);現(xiàn)在如何將此用戶列表排序或過(guò)濾到只有 u1,u2,u4,u5 的新列表,因?yàn)?u2,u3 具有相同的電子郵件。我嘗試使用所有這些選項(xiàng) 1)List<UserDTO> newUsersList =    uers.stream().distinct().collect(Collectors.toList());2)List<UserDTO> newUsersList =  users.stream().filter(o-> ! o.getEmail().equalsIgnoreCase(users.parallelStream().findAny().get().getEmail())).collect(Collectors.toList());3) List<UserDTO> newUsersList =  users2.stream().filter(o-> users2.stream().map(UserDTO::getEmail).anyMatch(p -> !p.equalsIgnoreCase(o.getEmail()))).collect(Collectors.toList());4)Set<UserDTO> newUsersList = users2.stream().filter(o-> users2.stream().map(UserDTO::getEmail).anyMatch(p -> !p.equalsIgnoreCase(o.getEmail()))).collect(Collectors.toSet());我想要List<UserDTO> newUsersList = new ArrayList<>(); for(UserDTO u :newUsersList ) {    System.out.println(u.getName() + "  "+u.getEmail());}印刷one  alex@gmail.comtwo  andy@gmail.comfour  ankit@gmail.comfive  amar@gmail.com
查看完整描述

2 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果您可以覆蓋hashCodeand equals,請(qǐng)按照 Ravindra Ranwala 的說(shuō)明操作并使用Set:


    Collection<UserDTO> unique = new HashSet<>(users);

如果您無(wú)法覆蓋它們,您可以使用TreeSet并為其提供自定義Comparator:


    Collection<UserDTO> unique = new TreeSet<>(Comparator.comparing(UserDTO::getEmail));

    unique.addAll(users);

雖然非常簡(jiǎn)單,但這些方法的缺點(diǎn)是會(huì)丟失元素的順序。如果這很重要,請(qǐng)嘗試從List“手動(dòng)”中刪除重復(fù)項(xiàng):


    Collection<String> uniqueEmails = new HashSet<>();

    users.removeIf(user -> !uniqueEmails.add(user.getEmail()));

您還可以將此方法用于 a 中的filter階段Stream:


    users.stream()

         .filter(user -> uniqueEmails.add(user.getEmail()))

         ...

正如您通過(guò)這種方法或 Eran 的回答所看到的,純基于流的解決方案并不簡(jiǎn)單。他們要么依賴外部狀態(tài),要么創(chuàng)建臨時(shí)集合/映射來(lái)實(shí)現(xiàn)過(guò)濾。實(shí)現(xiàn)hashCode/時(shí)它變得簡(jiǎn)單得多equals。


查看完整回答
反對(duì) 回復(fù) 2021-06-30
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以使用電子郵件地址collectors.groupingBy對(duì)UserDTO實(shí)例進(jìn)行分組,然后獲取每個(gè)組的第一個(gè)實(shí)例:


List<UserDTO> newUsersList =

    users.stream() // Stream<UserDTO>

         .collect(Collectors.groupingBy(UserDTO::getEmail)) // Map<String,List<UserDTO>>

         .values() // Collection<List<UserDTO>>

         .stream() // Stream<List<UserDTO>>

         .map(list -> list.get(0)) // Stream<UserDTO>

         .collect(Collectors.toList()); // List<UserDTO> that has one instance for each

                                        // unique email

該users.stream().distinct().collect(Collectors.toList())如果實(shí)現(xiàn)嘗試只會(huì)工作equals的UserDTO類只比較電子郵件地址(這是指含相同的電子郵件兩種情況將被視為相等)。


查看完整回答
反對(duì) 回復(fù) 2021-06-30
  • 2 回答
  • 0 關(guān)注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)