java 链式_java集合之链式操作

如果用过js/jquery、groovy等语言,大概对这样的代码比较熟悉:

[1,2,3].map(function(d){...}).grep(function(d){...}).join(',')

这样的对集合的链式操作不仅书写方便,而且更方便阅读。在java8中使用集合流和lamda表达式也可以达到这个效果。

本文提供一个简单的工具类,用java模拟集合链式操作,可以在非java8-的环境中使用。

使用方法如下:

new CollectionPipe(new Integer[]{1,2,3})

.filter(new Filter(){...})

.map(new Mapper(){...})

.join(",")

/

CollectionPipe.fromArray(new double[]{1.5d,1.6d,2.8d})

.filter(new Filter(){...})

.map(new Mapper(){...})

.join(",")

完整代码为:

// S--> 集合元素类型

public class CollectionPipe {

List source=new ArrayList();

public CollectionPipe() {

super();

}

public CollectionPipe(Collection extends S> collection) {

super();

source.addAll(collection);

}

public CollectionPipe(S[] array){

super();

for(S item:array)

source.add(item);

}

// O-->映射后集合类型

public CollectionPipe map(

Mapper mapper) {

List result=new ArrayList();

for(S item:source)

result.add(mapper.map(item));

return new CollectionPipe(result);

}

public CollectionPipe filter(Filter filter){

Iterator it=source.iterator();

while(it.hasNext()){

if(!filter.filter(it.next()))

it.remove();

}

return this;

}

public String join(String seg){

String result="";

if(source==null)

return result;

int index=0;

for(Object o:source){

index++;

if(index==source.size())

result+=String.valueOf(o);

else

result+=String.valueOf(o)+seg;

}

return result;

}

public List getList() {

return source;

}

public Set getSet(){

return new HashSet(source);

}

public static CollectionPipe fromArray(double [] array){

CollectionPipe result=new CollectionPipe<>();

for(double item:array)

result.source.add(item);

return result;

}

public static CollectionPipe fromArray(int [] array){

CollectionPipe result=new CollectionPipe<>();

for(int item:array)

result.source.add(item);

return result;

}

}

public interface Mapper {

O map(I item);

}

//true-->保留;false-->舍弃

public interface Filter {

boolean filter(I item);

}

读者可以自行扩展从不同的源生成pipe,或者加上并行功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值