Stream<String> stream = Stream.of("1", "2", "3");
Writer writer = new FileWriter("example.txt");
stream.forEach(s -> writer.append(s)); // Unhandled exception: java.io.IOException
stream.forEach(s -> {
try {
writer.append(s);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
替代的解决方法可以是将有限的函数foreach
转换为对检查的异常更友好的普通旧foreach循环。
但天真的方法是失败的:
for (String s : stream) { // for-each not applicable to expression type 'java.util.stream.Stream<java.lang.String>'
writer.append(s);
}
for (String s : stream.iterator()) { // foreach not applicable to type 'java.util.Iterator<java.lang.String>'
writer.append(s);
}
更新
回答这个问题的一个技巧以前在Why does stream
根据定义,foreach循环需要传入一个迭代程序。
可以通过匿名类实现:
for (String s : new Iterable<String>() {
@Override
public Iterator<String> iterator() {
return stream.iterator();
}
}) {
writer.append(s);
}
使用lambda可以简化这一点,因为iterable
是一个功能接口:
for (String s : (Iterable<String>) () -> stream.iterator()) {
writer.append(s);
}
可以将其转换为方法引用:
for (String s : (Iterable<String>) stream::iterator) {
writer.append(s);
}
可以使用中间变量或方法参数避免显式强制转换:
Iterable<String> iterable = stream::iterator;
for (String s : iterable) {
writer.append(s);
}
maven central中还有一个StreamEx库,它提供了可迭代流和其他开箱即用的特性。
Java8:Lambda-Streams,通过有异常的方法筛选
如何从Java8流内部抛出检查异常?(不将其包装为未检查的异常)
Java8:lambda表达式中的强制检查异常处理。为什么是强制性的,而不是选择性的?
问题内容: 假设我们尝试将可能引发检查异常的lambda应用于Java 8流: 这不会编译。 一种解决方法是将检查后的异常嵌套在其中,但是这会使以后的异常处理变得复杂,而且很丑陋: 另一种解决方法可能是转换限制功能,以普通的旧的foreach 循环是比较友好的检查的异常。 但是幼稚的方法失败了: 更新资料 为何在的地方贴了一个回答该问题的技巧。作为副答案本身并不能真正回答该问题。我认为这不足以使这
如果我试图在java中查找遍历foreach循环的次数,还有比这更好的方法吗? 我知道我可以只使用一个普通的for循环并拥有一个迭代器I,但我只是想知道是否有一种更优雅的方法来使用foreach.tanks in prevair:) 编辑:正如Jon Skeet指出的,上面的代码将新的按钮实例分配给迭代变量。哎呀。基于其他评论,我相信最实用的使用是一个正常循环。这是我要用的版本。谢谢大家的帮助!
本文向大家介绍深入了解java8的foreach循环,包括了深入了解java8的foreach循环的使用技巧和注意事项,需要的朋友参考一下 虽然java8出来很久了,但是之前用的一直也不多,最近正好学习了java8,推荐一本书还是不错的<写给大忙人看的javase8>。因为学习了Java8,所以只要能用到的地方都会去用,尤其是Java8的Stream,感觉用起来觉得很方便,因为点点点就出来了,而且
本文向大家介绍如何在PowerShell foreach并行循环中使用PSCustomObject?,包括了如何在PowerShell foreach并行循环中使用PSCustomObject?的使用技巧和注意事项,需要的朋友参考一下 要在Foreach并行循环内使用PSCustomObject ,我们首先需要考虑如何在循环内使用变量。 因此,让我们看看是否可以在$out变量中存储或更改值。 示例
问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预
我想通过foreach循环显示blade上的一些数据,如下所示: 但我需要根据降序检索这些数据。那么我如何将这个条件添加到循环中。 如果你们能分享你们的想法或建议我会很感激的... 提前道谢。