在java8中,如何在lambdas foreach块中设置全局值?

public void test(){

String x;

List list=Arrays.asList(“a”,”b”,”c”,”d”);

       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

回到顶部