日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 自定义 operator_java8 自定义Collector

發(fā)布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 自定义 operator_java8 自定义Collector 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

package com.lgx.jdk8.part02;

import java.util.*;

import java.util.function.BiConsumer;

import java.util.function.BinaryOperator;

import java.util.function.Function;

import java.util.function.Supplier;

import java.util.stream.Collector;

/**

* 自定義Collector,定義一個Set收集器

*/

public class Test13MySetCollector{

public static void main(String[] args) {

List list = Arrays.asList("hello", "world", "hello", "welcome");

Set set = list.stream().collect(new MySetCollector<>());

System.out.println("set = " + set);

System.out.println("========================");

List list2 = Arrays.asList("hello", "world", "hello", "welcome", "a", "b", "c", "d");

Set set2 = new HashSet<>();

set2.addAll(list2);

System.out.println("set2 = " + set2);

//如果parallel和sequential寫多個,以最后一個為準,因為在實現(xiàn)中就是以一個boolean來判斷的

for (int i = 0; i < 1; i++) {//執(zhí)行100次驗證并行,加這個參數(shù)CONCURRENT報錯問題

//Map map = set2.stream().collect(new MyMapCollector<>()); //串行

//Map map = set2.parallelStream().collect(new MyMapCollector<>()); //并行

Map map = set2.stream().sequential().collect(new MyMapCollector<>()); //串行

//Map map = set2.stream().parallel().collect(new MyMapCollector<>()); //并行

System.out.println("map = " + map);

}

System.out.println("可運行線程數(shù)=總cpu-被占用的cpu = " + Runtime.getRuntime().availableProcessors());

}

}

//自定義收集器,輸入時Set,輸出是Set

class MySetCollector implements Collector, Set> {

//創(chuàng)建一個新的容器

@Override

public Supplier> supplier() {

System.out.println("MySetCollector supplier invoked");

return HashSet::new;

}

//累加器:添加一個元素到容器

@Override

public BiConsumer, T> accumulator() {

System.out.println("MySetCollector accumulator invoked");

//return HashSet::add;//這里不能給一個具體的Set,因為supplier方法可能返回的是TreeSet,不一定是HashSet

return Set::add;

}

//把并行流多個結(jié)果合并

@Override

public BinaryOperator> combiner() {

System.out.println("MySetCollector combiner invoked");

return (set1, set2) -> {

set1.addAll(set2);

return set1;

};

}

//完成器:合并完返回最終結(jié)果

@Override

public Function, Set> finisher() {

System.out.println("MySetCollector finisher invoked");

//return t -> t;

return Function.identity();//與上面那個等價

//throw new UnsupportedOperationException();

}

//返回一個集合,標識這個集合的諸多特性

/**

* Characteristics有3個值:

* CONCURRENT:表示可以并行收集

* UNORDERED:元素不保證順序的

* IDENTITY_FINISH:表示會執(zhí)行一個強制類型轉(zhuǎn)換,會調(diào)用finisher()方法

*/

@Override

public Set characteristics() {

System.out.println("MySetCollector characteristics invoked");

return Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH, Characteristics.UNORDERED));

}

}

//自定義收集器,輸入時Set,輸出是Map

class MyMapCollector implements Collector, Map> {

//創(chuàng)建一個新的容器

@Override

public Supplier> supplier() {

System.out.println("MyMapCollector supplier invoked");

//return HashSet::new;

return () -> {

System.out.println("***************");//串行這里只執(zhí)行一次,并行這里執(zhí)行多次

return new HashSet();

};

}

//累加器:添加一個元素到容器

@Override

public BiConsumer, T> accumulator() {

System.out.println("MyMapCollector accumulator invoked");

//return Set::add;

return (set, item) -> {

System.out.println("MyMapCollector accumulator set = " + set + " " + Thread.currentThread().getName());

//報錯在于這里調(diào)用(打印)了set,和下面的代碼產(chǎn)生了一邊修改一邊迭代,刪掉這個打印就好了

set.add(item);

};

}

//把并行流多個結(jié)果合并

@Override

public BinaryOperator> combiner() {

System.out.println("MyMapCollector combiner invoked");

return (set1, set2) -> {

set1.addAll(set2);

System.out.println("MyMapCollector combiner set1 = " + set1 + " set2 = " + set2);

return set1;

};

}

//完成器:合并完返回最終結(jié)果

@Override

public Function, Map> finisher() {

System.out.println("MyMapCollector finisher invoked");

return set -> {

Map map = new HashMap();

set.stream().forEach(item -> map.put(item, item));

return map;

};

}

//返回一個集合,標識這個集合的諸多特性

@Override

public Set characteristics() {

System.out.println("MyMapCollector characteristics invoked");

//return Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH));//運行會報錯,因為這樣會執(zhí)行強制類型轉(zhuǎn)換,而事實上無法將一個Set強制轉(zhuǎn)換成Map

/**

* Characteristics.CONCURRENT:

* 如果上面調(diào)用parallelStream,不管有沒有這個屬性都是并行

* 不加這個屬性,是多個線程操作多個結(jié)果容器,combiner也會調(diào)用多次

* 加了這個屬性,是多個線程操作一個結(jié)果容器,combiner也無需調(diào)用了

*/

return Collections.unmodifiableSet(EnumSet.of(Characteristics.UNORDERED));//合并方法執(zhí)行多次

//return Collections.unmodifiableSet(EnumSet.of(Characteristics.UNORDERED, Characteristics.CONCURRENT));//合并方法不會執(zhí)行,多次運行該示例可能拋出異常ConcurrentModificationException

/**

* ConcurrentModificationException:并發(fā)修改異常,一個線程修改在一個集合,另一個集合在迭代這個集合,就會報出這個異常

* 不加CONCURRENT,多個容器,也就互不干擾了;加了就一個容器,就會出現(xiàn)這個問題

*/

}

}

總結(jié)

以上是生活随笔為你收集整理的java 自定义 operator_java8 自定义Collector的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91视频亚洲 | 日本激情一区 | 亚洲精品国产成人av在线 | 亚洲成av人片在线观看 | 免费av软件| 哺乳喂奶一二三区乳 | 欧美一线天 | 男人天堂一区二区 | jizzzz中国| 免费观看成人鲁鲁鲁鲁鲁视频 | 成年人在线观看av | 91在线视频观看 | 火影黄动漫免费网站 | 日本肉体xxxⅹ裸体交 | 91插插插影库永久免费 | 国产成人一区二区三区影院在线 | 天天插天天透 | 爱插网| 久久91精品国产 | 一级做a视频| 自拍av在线 | 中国a级黄色片 | 国产真人做爰视频免费 | 第一页在线视频 | 欧美50p| 精品一区在线 | 俄罗斯色片 | 亚洲精品无吗 | 无码国产色欲xxxx视频 | 制服师生在线 | 农村村妇真实偷人视频 | 中文字幕1页 | 国产亚洲美女精品久久久2020 | 国产无码精品在线观看 | 国产一区二区欧美日韩 | 激情影院内射美女 | 日本一道在线 | 西野翔之公侵犯中文字幕 | 一级看片免费视频 | 亚洲三级视频 | 粉嫩欧美一区二区三区 | 国产精品aⅴ| 8x国产一区二区三区精品推荐 | 伊人涩涩| 和黑帮大佬的365 | 黄色大片免费观看 | 探花系列在线观看 | 先锋影音av资源在线 | 日韩欧美视频在线免费观看 | 丰满大乳国产精品 | 色综合久久久久 | 久久精品国产亚洲av久 | 久久综合成人网 | 蜜臀av一区二区三区有限公司 | 亚洲区一区二区三区 | 久久艹这里只有精品 | 制服师生在线 | 国产在线123 | 欧美人体视频一区二区三区 | 超碰免费公开在线 | 小向美奈子在线观看 | 欧美一二区 | 99无码熟妇丰满人妻啪啪 | 国外亚洲成av人片在线观看 | 天天弄天天操 | 老牛影视av牛牛影视av | 2025国产精品视频 | 深夜福利一区二区 | m3u8成人免费视频 | 夜夜夜撸| 国产66页 | 欧美亚洲另类小说 | 4hu最新网址 | 天堂最新| 久久成年 | 黑人玩弄人妻一区二 | 在线成人中文字幕 | 亚洲精品在线网站 | 2022国产精品| 日本第一页 | 亚洲精品久久夜色撩人男男小说 | 午夜影院在线免费观看 | 你懂的欧美 | 国产1区| 久久97精品久久久久久久不卡 | 国产精品久久久久久久久久久久久久久久久 | 日日草草 | 色一情一乱一伦 | 亚洲校园激情 | 性中国古装videossex | 国产高清免费在线 | 欧美日韩在线一区二区三区 | 农民人伦一区二区三区 | av自拍一区| 亚洲精品白浆高清久久久久久 | 久久精品女人毛片国产 | 一起草视频在线播放 | 色噜噜狠狠一区二区三区果冻 | 国产第一精品视频 |