java - java8中,如何在lambdas foreach block 中设置全局值?

标签 java foreach lambda java-8

    public void test(){
       String x;
       List<String> list=Arrays.asList("a","b","c","d");

       list.forEach(n->{
          if(n.equals("d"))
            x="match the value";
       });
    }

1.和上面的代码一样,我想在foreach block 旁边设置一个变量的值,可以吗?

2. 为什么?

3.foreach迭代器是有序还是无序?

4.我认为 lamdas foreach block 对于迭代器来说既酷又简单,但这确实是一件复杂的事情,而不是在 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";
    });
}

不过,请准备好被团队中的功能纯粹主义者殴打。然而,更好的是使用更实用的方法(similar to Sleiman's approach):

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);
}

关于java - java8中,如何在lambdas foreach block 中设置全局值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521972/

相关文章:

java - GridBagConstraints weightx 和 weighty 值

java - Java进程是如何死亡的?

r - 在 R : Segmentation fault (core dumped) warning 的 foreach 循环中调用可执行文件

Java 8 lambda 和 alpha 等价

multithreading - 如果一个线程调用 getStackTrace() 并且 lambda 定义(通过 Unsafe.defineAnonymousClass)发生在另一线程中,则 Java8 挂起

c# - 如何动态创建 lambda 表达式

java - 什么都不返回,使用 array == null 或 array.length == 0?

java - 如何在 Anchor 上一次只显示一个 AR 对象?

php - 在具有 2 列的表中显示数组

PHP循环curl请求一个一个