enumerable java_基于Java8的LINQ开源项目:Java Enumerable

enumerable java_基于Java8的LINQ开源项目:Java Enumerable微软推出的 LINQ 曾经领先 Java 很长一段时间 如今随着 Java8 的 lambdas 推出 Java 总算赶上来 streams 有如下方法 mapfilterfla i e take skipreduce i efold minmaxanyall forbuildingi 但是有一问题不能扩展它们 比

微软推出的LINQ曾经领先Java很长一段时间,如今随着Java 8的lambdas推出,Java总算赶上来,streams有如下方法:

map

filter

flatMap

distinct

sorted

limit (i.e. take)

skip

reduce (i.e fold)

min

max

any

all

generate (for building infinite lists)

但是有一问题不能扩展它们,比如如果希望实现如下:

first

last

nth

windowed

intersperse

intercalate

tails

intersect

zip

groupRuns

这些都是F#/Haskell的丰富函数功能,.NET 是使用 extension方法解决lambda这个问题的。

如今使用Java 8重新构建的LinQ开源项目推出:Java Enumerable

这个受F#,C#和Haskell的启发,使用Java递延懒集合的实现。目标是使与iterable中元素更容易打交道,提供如下:

Map

Zip

Zip3

Filter

FlatMap

Order

OrderBy

OrderDesc

OrderByDesc

Take

TakeWhile

Skip

SkipWhile

Iter

Iteri

DistinctUnion

Distinct

DistinctBy

Intersect

Except

First

Last

Nth

Fold

FoldWithDefaultSeed

Any

All

Windowed

Tails

Pairwise

GroupRuns

Intersperse

Intercalate

ToDictionary

ToGroupedDictionary

Range

Min

Max

MinBy

MaxBy

比如Iterator 链实现如下:

private Function, Iterator> iteratorGenerator;

public static Enumerable init(Iterable source){

return new Enumerable<>(_ig -> new EnumerableIterator<>(source));

}

protected Enumerable(Function, Iterator> iteratorGenerator) {

this.iteratorGenerator = iteratorGenerator;

}

@Override

public Iterator iterator() {

return iteratorGenerator.apply(this);

}

// The underlying iterator

public class EnumerableIterator implements Iterator {

protected Iterator source;

private Iterable input;

public EnumerableIterator(Iterable input){

this.input = input;

reset();

}

protected void reset(){

source = input.iterator();

}

@Override

public boolean hasNext() {

return source.hasNext();

}

@Override

public TSource next() {

return (TSource)source.next();

}

}

基本思想是是为你想要做的每一个类型的处理创建一个迭代器,如果你要做一个map函数,你应当创建一个迭代器iterator来包裹源.

[该贴被banq于2014-03-08 15:45修改过]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206052.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:35
下一篇 2026年3月19日 下午4:36


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号