真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java8的collectors怎么使用

本篇內(nèi)容介紹了“java8的collectors怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司是專業(yè)的文圣網(wǎng)站建設(shè)公司,文圣接單;提供成都做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行文圣網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

java8中提供了對(duì)集合進(jìn)行轉(zhuǎn)化,然后進(jìn)行歸集的的操作。這就不得不提Collectors這個(gè)類了,真的很強(qiáng)大,我們看示例吧。

KeyAndValue a1 = new KeyAndValue().setName("kevin").setValue("lee");
KeyAndValue a2 = new KeyAndValue().setName("kevin").setValue("lee");
KeyAndValue a3 = new KeyAndValue().setName("kevin1").setValue("lee");
KeyAndValue a4 = new KeyAndValue().setName("kevin1").setValue("123123");
KeyAndValue a5 = new KeyAndValue().setName("kevin2").setValue("lee5");
KeyAndValue a6 = new KeyAndValue().setName("kevin3").setValue("lee8");
List list = Arrays.asList(a1, a2, a3, a4, a5, a6);

基礎(chǔ)的toList、toSet、toMap就不講了,簡(jiǎn)單易用,一看就會(huì),我說(shuō)說(shuō)稍微復(fù)雜的。

collectingAndThen:使用collector進(jìn)行歸集,然后對(duì)歸結(jié)的結(jié)果進(jìn)行加工

List collect = list.stream().collect(Collectors.collectingAndThen(Collectors.mapping(a -> a.getValue(), Collectors.toList()), v -> {
    v.sort(Comparator.comparing(String::length).reversed());return v;
}));
System.out.println(collect);//[123123, lee5, lee8, lee, lee, lee]

groupingBy分組操作:基于一個(gè)key值,對(duì)元素進(jìn)行分組

Map> collect = list.stream().collect(Collectors.groupingBy(a -> a.getName()));
System.out.println(JSON.toJSONString(collect));// {"kevin":[{"name":"kevin","value":"lee"},{"name":"kevin","value":"lee"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}Map> collect1 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName, Collectors.mapping(b -> b.getValue(), Collectors.toSet())));
System.out.println(JSON.toJSONString(collect1));// {"kevin":["lee"],"kevin2":["lee5"],"kevin1":["123123","lee"],"kevin3":["lee8"]}Map> collect3 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName, Collectors.toSet()));
System.out.println(JSON.toJSONString(collect3));// {"kevin":[{"name":"kevin","value":"lee"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}Map> collect4 = list.stream().collect(Collectors.groupingBy(KeyAndValue::getName,TreeMap::new, Collectors.toSet()));
System.out.println(JSON.toJSONString(collect4));// {"kevin":[{"name":"kevin","value":"lee"}],"kevin1":[{"name":"kevin1","value":"lee"},{"name":"kevin1","value":"123123"}],"kevin2":[{"name":"kevin2","value":"lee5"}],"kevin3":[{"name":"kevin3","value":"lee8"}]}

join操作:對(duì)元素進(jìn)行拼接,有三個(gè)方法。

String joinResult = list.stream().map(KeyAndValue::getName).collect(Collectors.joining());
System.out.println(joinResult);//kevinkevinkevin1kevin1kevin2kevin3String joinResult1 = list.stream().map(KeyAndValue::getName).collect(Collectors.joining(","));
System.out.println(joinResult1);// kevin,kevin,kevin1,kevin1,kevin2,kevin3String joinResult2 = list.stream().map(KeyAndValue::getName).collect(Collectors.joining(",","(",")"));
System.out.println(joinResult2);// (kevin,kevin,kevin1,kevin1,kevin2,kevin3)

partitioningBy操作:基于斷言對(duì)元素按truefalse進(jìn)行分組

Map> partitioningBy = list.stream()
        .collect(Collectors.partitioningBy(k -> k.getName().equals("kevin")));
System.out.println(partitioningBy);//{false=[KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin1, value=123123), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)], true=[KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin, value=lee)]}Map> partitioningBy1 = list.stream()
        .collect(Collectors.partitioningBy(k -> k.getName().equals("kevin"), Collectors.mapping(v -> v.getValue(), Collectors.toList())));
System.out.println(partitioningBy1);// {false=[lee, 123123, lee5, lee8], true=[lee, lee]}

min/minBy , max/maxBy用法一致:使用一個(gè)比較器獲得最大值或最小值

Optional min = list.stream().map(KeyAndValue::getName).min(Comparator.comparing(v->v.length()));
System.out.println(min.get());//kevinOptional min1 = list.stream().min(Comparator.comparing(v->v.getValue().length()));
System.out.println(min1.get());// KeyAndValue(name=kevin, value=lee)Optional min2 = list.stream().map(KeyAndValue::getName).collect(Collectors.minBy(Comparator.comparing(String::length)));
System.out.println(min2.get());//kevinOptional min3 = list.stream().collect(Collectors.minBy(Comparator.comparing(v->v.getValue().length())));
System.out.println(min3.get());// KeyAndValue(name=kevin, value=lee)

mapping操作:使用一個(gè)function對(duì)元素進(jìn)行加工,然后使用collector進(jìn)行收集

List mapping = list.stream().collect(Collectors.mapping(v -> v.getValue().concat("agc"), Collectors.toList()));
System.out.println(mapping);// 類似 Stream 先進(jìn)行map操作,再進(jìn)行collectList mapping_ = list.stream().map(v -> v.getValue().concat("agc")).collect(Collectors.toList());
System.out.println(mapping_);// [leeagc, leeagc, leeagc, 123123agc, lee5agc, lee8agc]

toCollection:將元素按照順序復(fù)制到另一個(gè)收集器(集合)中,類似于Collectors.toList()

    ArrayList collect1 = list.stream().collect(Collectors.toCollection(ArrayList::new));
    System.out.println(collect1);//    [KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin1, value=123123), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)]

根據(jù)某個(gè)屬性進(jìn)行去重

TreeSet collect = list.stream().collect(Collectors.toCollection(() -> new TreeSet(Comparator.comparing(KeyAndValue::getName))));
System.out.println(collect);// [KeyAndValue(name=kevin, value=lee), KeyAndValue(name=kevin1, value=lee), KeyAndValue(name=kevin2, value=lee5), KeyAndValue(name=kevin3, value=lee8)]

“java8的collectors怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


名稱欄目:java8的collectors怎么使用
當(dāng)前網(wǎng)址:http://weahome.cn/article/ipiodj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部