package design.demo;
import java.util.function.Consumer;
/**
* @author:ace
* @date:2020-01-07
*/
public class MySpliterator<T> {
T[] table;
int index;
int fence;
public MySpliterator(T[] table,int origin,int fence){
this.table = table;
this.index = origin;
this.fence = fence;
}
private int getFence(){
if(fence < 0){
fence = table.length;
}
return fence;
}
public MySpliterator<T> trySplit(){
int hi = getFence();
int lo = index;
int mid = (lo + hi) >>> 1;
if(lo >= mid){
return null;
}
return new MySpliterator<>(table,lo,index=mid);
}
public void forEach(Consumer<? super T> action){
int i,hi;
if((hi=fence) < 0){
hi = fence = table.length;
}
if(table.length>=hi && (i=index)>=0 && (i< (index = hi)) ){
do{
System.out.printf("current index : " + index + " | ");
action.accept(table[i++]);
}while(i<hi);
}
}
public static void main(String[] args) {
String[] strings = new String[16];
for (int i = 0; i < 16; i++) {
strings[i] = "string" + i;
}
MySpliterator<String> spliterator = new MySpliterator<>(strings,0,-1);
int index = 1;
do{
new Thread(new MyRunnable(spliterator,"thread"+ index++)).start();
}while((spliterator = spliterator.trySplit())!=null);
}
static class MyRunnable implements Runnable{
MySpliterator<String> spliterator;
String name;
public MyRunnable(MySpliterator<String> spliterator,String name){
this.spliterator = spliterator;
this.name = name;
}
@Override
public void run() {
spliterator.forEach(item->{
System.out.println(name + " : " + item);
});
}
}
}
看不懂HashMap内部的Spliterator不要紧,来看这个简化版本
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 野球场,是讲规矩的。 野球场的人,都是有故事的。 1 在野球场子里,判断力是真的很重要的一件事情。有时候你看着一个...