有人可以解释下面java流代码的输出:
List<Integer> l = new ArrayList<>();
l.add(0);
l.add(1);
l.add(2);
l.add(3);
l.add(4);
l.add(4);
l.stream()
.distinct()
.map(v -> {
System.out.println("In Map " + v);
return v;
}).forEach(v -> {
System.out.println("In ForEach " + v);
});
我期待:
In Map 0
In Map 1
In Map 2
In Map 3
In Map 4
In ForEach 0
In ForEach 1
In ForEach 2
In ForEach 3
In ForEach 4
但它打印出来:
In Map 0
In ForEach 0
In Map 1
In ForEach 1
In Map 2
In ForEach 2
In Map 3
In ForEach 3
In Map 4
In ForEach 4
答案 0 :(得分:0)
我认为这很明显:)它在Map中,每个值都在foreach调用。这就像嵌套循环。获得价值1 - 处理它,获得价值2处理它;)这就是你得到的
答案 1 :(得分:0)
const myStr: ActionTypes = "something" // no error
const myStr2: ActionTypes = "ACTION_ONE" // error
管道被懒惰地评估。这意味着它仅在终端操作需要这些元素时才对Stream
元素执行中间操作 - 在您的情况下为Stream
。
如果终端操作只需要一个元素(例如forEach
),则findFirst()
操作仅对map()
的第一个元素执行。