首页 > 解决方案 > Lambda表达式java,传递参数

问题描述

我对 java 中的 lambda 表达式有疑问。

List<String> l = new ArrayList<String>();
l.add("Besit");
l.add("Java");
String str = "Java";
boolean flag = false;
int counter = 0;
l.forEach((h) -> {
    if (h.equals(str)) {
        counter++;
        flag = true.
    }
});

显然,我有错误,因为 forEach 没有看到strand flag,我知道在 C++ lambda 中我们可以通过引用传递一些参数。在java中可以做到这一点吗?

标签: javalambda

解决方案


您应该以不同的方式解决问题,以便您不需要在 lambda 中更新(尽管flag您可以访问):str

boolean flag = l.stream().anyMatch(h -> h.equals(str));

对于您更新的代码,您可以这样做:

int counter = (int) list.stream().filter(h -> h.equals(str)).count();
// or int counter = (int) list.stream().filter(h -> h.equals(str)).mapToInt(h -> 1).sum(); 
boolean flag = count > 0;

推荐阅读