Java 8 当我使用Java 8 lambda对来自流的一系列项使用limit()时,如何获得超出的限制?
如果不使用另一个条件来比较map.size和limitValue,我如何知道当我的流迭代时限制已超过? 在这里 对于limitValue=3,它应该返回false。 对于limitValue=4,它应该返回true。 我不能使用外部int字段,因为它必须是final才能在lambda内部使用Java 8 当我使用Java 8 lambda对来自流的一系列项使用limit()时,如何获得超出的限制?,java-8,Java 8,如果不使用另一个条件来比较map.size和limitValue,我如何知道当我的流迭代时限制已超过? 在这里 对于limitValue=3,它应该返回false。 对于limitValue=4,它应该返回true。 我不能使用外部int字段,因为它必须是final才能在lambda内部使用 import java.util.*; import java.util.stream.*; public class Test { public static void main(String[
import java.util.*;
import java.util.stream.*;
public class Test {
public static void main(String[] args) throws Exception {
Map<Integer, String> map = new HashMap<>();
map.put(1, "foo");
map.put(2, "bar");
map.put(3, "baz");
int limitValue = 3;
String result = map.entrySet()
.stream()
.limit(limitValue)
.map(entry -> entry.getKey() + " - " + entry.getValue())
.collect(Collectors.joining(", "));
System.out.println(result);
}
}
我不能使用外部int字段,因为它必须是最终字段才能使用
在兰姆达里面
import java.util.*;
import java.util.stream.*;
public class Test {
public static void main(String[] args) throws Exception {
Map<Integer, String> map = new HashMap<>();
map.put(1, "foo");
map.put(2, "bar");
map.put(3, "baz");
int limitValue = 3;
String result = map.entrySet()
.stream()
.limit(limitValue)
.map(entry -> entry.getKey() + " - " + entry.getValue())
.collect(Collectors.joining(", "));
System.out.println(result);
}
}
是的,这是因为,在lambda表达式中,只能引用java中值不变的局部变量
这在某种程度上是一件好事,因为在并行执行时,在lambda中变异变量不是线程安全的
因此,系统通过只允许在lambdas中使用final或有效的final变量,帮助您在编译时防止出现这种情况
注意,此限制仅适用于局部变量
无论如何,我的建议是不要对不完全包含在给定函数本身中的变量进行变异,因为它会引入副作用,而流操作的行为参数中的副作用通常是不鼓励的
保持简单,并按照以下方法进行操作
boolean exceeded = limitValue > map.size();
使用另一个条件来比较map.size和limitValue有什么问题?您想解决什么具体问题?boolean Extered=limitValue>map.size有什么问题?我是说,你为什么不能用这个?