使用java流将两个相同大小(和不同类型)的列表组合到域对象列表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java流将两个相同大小(和不同类型)的列表组合到域对象列表中相关的知识,希望对你有一定的参考价值。

我有两个相同大小的idsresults列表,我想用域对象创建新列表。

List<Id> ids = ...

List<Result> results = redisTemplate.opsForValue().multiGet.get(ids);

List<DomainObject> list = // list of domain objects new DomainObject(id, result);

我用过的解决方案:

List<DomainObject> list = new ArrayList<>(ids.size());
for (int i = 0; i < ids.size(); i++) {
    list.add(new DomainObject(ids.get(i), results.get(i)));
}

有没有更优雅的方式来做到这一点,例如。使用溪流?

答案

Streams相同的方式是:

List<DomainObject> list = IntStream.range(0, ids.size())
                            .mapToObj(i -> new DomainObject(ids.get(i), results.get(i))) 
                            .collect(Collectors.toList());

或者看看Iterate two Java-8-Streams

另一答案

我找到了一种方法,使用番石榴zip操作员。

List<DomainObject> list = Streams.zip(ids.stream(), results.stream(), DomainObject::new)
                            .collect(Collectors.toList());

以上是关于使用java流将两个相同大小(和不同类型)的列表组合到域对象列表中的主要内容,如果未能解决你的问题,请参考以下文章

比较 2 个相同大小的元组列表:比较和交换

如何使用 Java 流将两个数组合并到一个映射中?

什么是方法重载?可以定义两个同名但参数类型不同的方法吗?

如何使用流将列表转换为带有索引的地图 - Java 8?

如何使用Java8流将列表列表转换为单个列表[重复]

在单元测试中访问具有相同类型对象的两个不同列表