JAVA8獲取list集合中重復(fù)的元素與獲取去重?cái)?shù)據(jù)實(shí)例
1.java8獲取list集合中重復(fù)的元素
//單獨(dú)String集合 List<String> list = Arrays.asList("a","b","a","c","d","b"); List<String> collect = list.stream().filter(i -> i != "") // list 對(duì)應(yīng)的 Stream 并過(guò)濾"" .collect(Collectors.toMap(e -> e, e -> 1, Integer::sum)) // 獲得元素出現(xiàn)頻率的 Map,鍵為元素,值為元素出現(xiàn)的次數(shù) .entrySet() .stream() // 所有 entry 對(duì)應(yīng)的 Stream .filter(e -> e.getValue() > 1) // 過(guò)濾出元素出現(xiàn)次數(shù)大于 1 (重復(fù)元素)的 entry .map(Map.Entry::getKey) // 獲得 entry 的鍵(重復(fù)元素)對(duì)應(yīng)的 Stream .collect(Collectors.toList()); System.out.println(collect);
2.java8根據(jù)List對(duì)象屬性獲取重復(fù)數(shù)據(jù)和獲取去重后數(shù)據(jù)
2.1獲取重復(fù)數(shù)據(jù)
List<Person> personList = new ArrayList<Person>(); personList.add(new Person("張三", 8, 3000)); personList.add(new Person("李四", 18, 5000)); personList.add(new Person("王五", 28, 7000)); personList.add(new Person("孫六", 38, 9000)); personList.add(new Person("孫六", 38, 9000)); personList.add(new Person("孫六", 38, 10000)); //1.先根據(jù)得到一個(gè)屬于集合 姓名 List<String> uniqueList = personList.stream().collect(Collectors.groupingBy(Person::getName, Collectors.counting())) .entrySet().stream().filter(e -> e.getValue() > 1) .map(Map.Entry::getKey).collect(Collectors.toList()); uniqueList.forEach(p -> System.out.println(p)); //計(jì)算兩個(gè)list中的重復(fù)值 3條數(shù)據(jù) List<Person> reduce1 = personList.stream().filter(item -> uniqueList.contains(item.getName())).collect(Collectors.toList()); System.out.println(reduce1.toString()); //2.根據(jù)多個(gè)屬性獲取重復(fù)數(shù)據(jù),只能重復(fù)操作得到重復(fù)的數(shù)據(jù) 工資 List<Integer> collect1 = reduce1.stream().collect(Collectors.groupingBy(Person::getWages, Collectors.counting())) .entrySet().stream().filter(e -> e.getValue() > 1) .map(Map.Entry::getKey).collect(Collectors.toList()); //計(jì)算兩個(gè)list中的差集 List<Person> collect2 = reduce1.stream().filter(item -> collect1.contains(item.getWages())).collect(Collectors.toList()); System.out.println(collect2.toString());
結(jié)果: 根據(jù)多個(gè)屬性獲取重復(fù)數(shù)據(jù),還在摸索中,歡迎大家來(lái)指點(diǎn)!?。。?!
2.2獲取去重后數(shù)據(jù)
List<Person> personList = new ArrayList<Person>(); personList.add(new Person("張三", 8, 3000)); personList.add(new Person("李四", 18, 5000)); personList.add(new Person("王五", 28, 7000)); personList.add(new Person("孫六", 38, 9000)); personList.add(new Person("孫六", 38, 9000)); personList.add(new Person("孫六", 38, 10000)); //去重 List<Person> unique = personList.stream().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new)); System.out.println("unique:"+unique.toString());
結(jié)果:
總結(jié)
到此這篇關(guān)于JAVA8獲取list集合中重復(fù)的元素與獲取去重?cái)?shù)據(jù)的文章就介紹到這了,更多相關(guān)JAVA8獲取list集合重復(fù)元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java圖像處理教程之正片疊底效果的實(shí)現(xiàn)
正片疊底效果是我們平時(shí)在Photoshop中會(huì)見到的一種效果,下面這篇文章主要給大家介紹了關(guān)于利用Java如何實(shí)現(xiàn)正片疊底的效果,分享出來(lái)供大家參考學(xué)習(xí),文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友可以參考借鑒,下面來(lái)一起看看詳細(xì)的介紹吧。2017-09-09SpringBoot Starter機(jī)制及整合tomcat的實(shí)現(xiàn)詳解
這篇文章主要介紹了SpringBoot Starter機(jī)制及整合tomcat的實(shí)現(xiàn),我們知道SpringBoot自己在“后臺(tái)”幫我們配置了很多原本需要我們手動(dòng)去的東西,至于這個(gè)“后臺(tái)”是啥,就是Starter機(jī)制2022-09-09實(shí)例講解分布式緩存軟件Memcached的Java客戶端使用
這篇文章主要介紹了分布式緩存軟件Memcached的Java客戶端使用,Memcached在GitHub上開源,作者用其Windows平臺(tái)下的版本進(jìn)行演示,需要的朋友可以參考下2016-01-01Java通過(guò)PropertyDescriptor反射調(diào)用set和get方法
這篇文章主要為大家詳細(xì)介紹了Java通過(guò)PropertyDescriptor反射調(diào)用set和get方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Java Fluent Mybatis 分頁(yè)查詢與sql日志輸出詳解流程篇
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國(guó)內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis關(guān)于分頁(yè)查詢、sql日志輸出流程2021-10-10利用Java實(shí)現(xiàn)動(dòng)態(tài)加載數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了一個(gè)java小案例,即動(dòng)態(tài)加載數(shù)據(jù)庫(kù)信息,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-10-10Java concurrency集合之LinkedBlockingDeque_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
LinkedBlockingDeque是雙向鏈表實(shí)現(xiàn)的雙向并發(fā)阻塞隊(duì)列。該阻塞隊(duì)列同時(shí)支持FIFO和FILO兩種操作方式,即可以從隊(duì)列的頭和尾同時(shí)操作(插入/刪除);并且,該阻塞隊(duì)列是支持線程安全。2017-06-06