java - 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 没有看到str
and flag
,我知道在 C++ lambda 中我们可以通过引用传递一些参数。在java中可以做到这一点吗?
解决方案
您应该以不同的方式解决问题,以便您不需要在 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;
推荐阅读
- html - 在带有居中文本的 div 旁边添加一个带有数字的圆圈
- arrays - 如果在使用 realloc 收缩后我仍然可以从另一个指针读取内容,那么 realloc 对释放的内存有什么作用?
- python - 查找 SVM 模型的 AUC 分数
- oracle - 如何在不升级数据库版本本身的情况下升级 Oracle Enterprise Manager Database Console?
- node.js - 有什么东西可以用来唯一标识连接到带有 Socket.IO 的套接字的设备吗?
- java - 使用流口水验证具有嵌套地图的事实
- javascript - 获取下拉列表中选定选项的值
- python - 为什么我的基于文本的冒险游戏“循环”通过 if 语句而不是做出非此即彼的决定?
- sql - 从存储过程中的 select 语句返回标识密钥
- hadoop - 如何识别副本块下的问题