在Java 8中,以下哪项更好?
Java 8:
joins.forEach(join -> mIrc.join(mSession, join));
Run Code Online (Sandbox Code Playgroud)
Java 7:
for (String join : joins) {
mIrc.join(mSession, join);
}
Run Code Online (Sandbox Code Playgroud)
我有很多可以用lambdas"简化"的for循环,但使用它们真的有什么好处吗?它会改善他们的性能和可读性吗?
编辑
我还将这个问题扩展到更长的方法.我知道你不能从lambda中返回或破坏父函数,在比较它们时也应该考虑到这一点,但还有什么需要考虑的吗?
在Java 8中,我们有Stream <T>类,它奇怪地有一个方法
Iterator<T> iterator()
Run Code Online (Sandbox Code Playgroud)
所以你会期望它实现接口Iterable <T>,这需要完全这个方法,但事实并非如此.
当我想使用foreach循环遍历Stream时,我必须做类似的事情
public static Iterable<T> getIterable(Stream<T> s) {
return new Iterable<T> {
@Override
public Iterator<T> iterator() {
return s.iterator();
}
};
}
for (T element : getIterable(s)) { ... }
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
使用stream.collect(Collectors.joining(", "))我可以轻松地加入由逗号分隔的流的所有字符串.可能的结果是"a, b, c".但是,如果我希望最后一个分隔符不同,该怎么办呢?例如是" and "这样的,我得到"a, b and c"的结果.有一个简单的解决方案吗?