这个问题在这里已经有了答案:
如何将一个对象的两个字段收集到同一个列表中(1个答案)
29天前关门了。
例如,我有一个类:
public class Period {
private Integer from;
private Integer to;
}
还有一个json格式的对象列表:
[
{
"from": 1,
"to": 2
}, {
"from": 3,
"to": 4
}, {
"from": 5,
"to": 6
}
]
我想从银行取钱 List<Period> periods
,将这两个字段中的所有值合并到一个集合中。在我的情况下是这样的 List<Integer> values
. 有没有可能使用 stream
在 periods
列表?我试着做这样的东西:
values = periods
.stream()
.mapToInt(p -> p.getFrom())
.boxed()
.collect(Collectors.toList());
values.addAll(
periods
.stream()
.mapToInt(p -> p.getTo())
.boxed()
.collect(Collectors.toList()));
对上一个json执行此操作的结果是:
[1,2,3,4,5,6]
是否有任何其他选项可以通过流操作来实现相同的结果?
3条答案
按热度按时间wgmfuz8q1#
您可以这样做:
44u64gxh2#
对于每个项目,创建两个属性的新流,并将它们展平。
j0pj023g3#
问题代码的输出是
[1, 3, 5, 2, 4, 6]
(代替[1, 2, 3, 4, 5, 6]
).如果你想要这个输出,这里有一个不使用
Stream.flatMap
:如果你想混合
from
以及to
价值观,那么其他的答案应该有用。正如评论中指出的,没有必要使用
Stream.mapToInt
然后Stream.boxed
,因为这不必要地取消了整数值的装箱和装箱。