gpt4 book ai didi

java - 从流中收集对

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:44 25 4
gpt4 key购买 nike

我有一个像这样的对象流:

"0", "1", "2", "3", "4", "5",

如何将其转换为成对流:

{ new Pair("0", "1"), new Pair("2", "3"), new Pair("4", "5")}.

流大小未知。我正在从一个可能很大的文件中读取数据。我只有要收集的迭代器,我使用 spliterator 将此迭代器转换为流。我知道这是使用 StreamEx 处理相邻对的答案: Collect successive pairs from a stream这可以在 java 或 StreamEx 中完成吗?谢谢

最佳答案

这不是天作之合,但你可以做到

List input = ...
List<Pair> pairs = IntStream.range(0, input.size() / 2)
.map(i -> i * 2)
.mapToObj(i -> new Pair(input.get(i), input.get(i + 1)))
.collect(Collectors.toList());

要在流中创建 Pairs,您需要一个有状态的 lambda,这通常应该避免,但可以做到。注意:这仅在流是单线程时才有效。即不平行。

Stream<?> stream = 
assert !stream.isParallel();
Object[] last = { null };
List<Pair> pairs = stream.map(a -> {
if (last[0] == null) {
last[0] = a;
return null;
} else {
Object t = last[0];
last[0] = null;
return new Pair(t, a);
}
}).filter(p -> p != null)
.collect(Collectors.toList());
assert last[0] == null; // to check for an even number input.

关于java - 从流中收集对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com