3 回答
TA贡献1820条经验 获得超2个赞
即“如何将两个 IntStream 合并为一个”。
你的另一个问题是“如何在Stream<T>不覆盖equals()andhashCode()方法的情况下合并两个?” 可以使用toMap收集器完成,即假设您不希望结果为Stream<T>. 例子:
Stream.concat(stream1, stream2)
.collect(Collectors.toMap(Student::getNo,
Function.identity(),
(l, r) -> l,
LinkedHashMap::new)
).values();
如果你想要结果,Stream<T>那么你可以这样做:
Stream.concat(stream1, stream2)
.collect(Collectors.collectingAndThen(
Collectors.toMap(Student::getNo,
Function.identity(),
(l, r) -> l,
LinkedHashMap::new),
f -> f.values().stream()));
这可能不像它那样有效,但它是另一种返回 a 的方法,Stream<T>其中T项目都是不同的,但不使用覆盖equals,hashcode正如您所提到的。
TA贡献1712条经验 获得超3个赞
对于第一个问题,您可以使用“flatMap”
IntStream stream1 = Arrays.stream(new int[] {13, 1, 3, 5, 7, 9});
IntStream stream2 = Arrays.stream(new int[] {1, 2, 6, 14, 8, 10, 12});
List<Integer> result = Stream.of(stream1, stream2).flatMap(IntStream::boxed)
.collect(Collectors.toList());
//result={13, 1, 3, 5, 7, 9, 1, 2, 6, 14, 8, 10, 12}
添加回答
举报