在java8中,如何在lambdas foreach块中设置全局值?
public void test(){
String x;
List
list.forEach(n->{ if(n.equals("d"))
x="match the value";
});
}
1,像上面的代码一样,我想在foreach块旁边设置一个变量的值,行得通吗?
2.为什么呢?
3,而foreach迭代器是有序的还是无序的?
4,我认为lamdas foreach块对于迭代器来说很酷而且很简单,但这确实是一件很复杂的事情,而不是在Java 7或之前的版本中完成相同的工作。
回答:
您当然可以通过技巧“使外部值可变”:
public void test() { String[] x = new String[1];
List<String> list = Arrays.asList("a", "b", "c", "d");
list.forEach(n -> {
if (n.equals("d"))
x[0] = "match the value";
});
}
不过,请准备好让功能强大的纯粹主义者击败团队。但是,更好的方法是使用功能更强大的方法(类似于Sleiman的方法):
public void test() { List<String> list = Arrays.asList("a", "b", "c", "d");
String x = list.stream()
.filter("d"::equals)
.findAny()
.map(v -> "match the value")
.orElse(null);
}
以上是 在java8中,如何在lambdas foreach块中设置全局值? 的全部内容, 来源链接: utcz.com/qa/420505.html