当前位置: 首页 > 面试题库 >

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

邹毅
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 我正在一个项目上,我想让我的索引在滚动时加载更多内容。我想设置一个全局变量来保存页面已加载多少次。我的项目结构如下: 首先,我在中声明全局变量: 皮查姆(Pycharm)警告 在: 还有 我也引用了global-variable-and-python-flask 但我没有main()函数。在Flask中设置全局变量的正确方法是什么? 问题答案: 你没有在定义,只是在声明,所以就好像在说

  • 问题内容: 我知道我可以每次设置超时: …但是我想设置一个全局超时来保持我的代码为DRY。 问题答案: UPDATED :$ http将不遵守默认设置,因为它在httpProvider中设置了超时(请参见注释)。可能的解决方法: https //gist.github.com/adnan-i/5014277 原始答案:

  • 问题内容: 我试图在mysql中设置sql_mode,但会引发错误。 命令: 这不是设置多种模式的正确方法吗?设置会话和全局模式的优点是什么?哪有?我有不同的用户尝试使用不同的UNC值更新数据库,并插入od将会话模式设置为“ NO_BACKSLASH_ESCAPES”,尽管为此我可以使用一种通用的模式。这有意义吗? 请告诉我。 谢谢。 问题答案: 我解决了 正确的模式是:

  • 但是我想存储一些复杂的对象,像这样 context-param不可能做到这一点,我还能在Java或Spring中使用什么?

  • 目标服务器正在使用自签名证书。是否有方法禁用认证检查?在另一个web服务器实例中,我们使用 在使用詹金斯时,是否可以有类似的选择?

  • 问题内容: 我正在尝试为我的应用程序修改golang时区 我看了一下 时间 包,初始化时区发生在 time / zoneinfo_unix.go @ initLocal 该函数只是尝试读取环境变量,如果有效,则将其加载 如果不是,它会回退,如果它无效,则会回退到 到目前为止我尝试过的 1-工作正常-但我不想使用任何一种方法-: 在我的docker文件中,我将ENV传递给了容器, 进入容器重击,运行