我有两个收藏:
List<String> names = ...
List<Long> counts = ...
List<Foo> foos = ...
record Foo(String name, long count)
现在我的解决办法是:
List<Foo> foos = IntStream.range(0, names.size())
.mapToObj(i -> new Foo(names.get(i), counts.get(i)))
.collect(Collectors.toList());
我的问题:是否有其他方法来配对和收集Foo对象?
您的解决方案依赖于两个集合的相同大小,因此我们应该重点关注这一点。让我们暂时搁置Java Stream API,因为除了使用带有索引的intStream
range之外,没有其他方法可以同时遍历两个集合。简单地说,Java流API不适合这个用例。
您需要确保在调用List::Get
时不抛出IndexOutOfBoundsException
。我更喜欢两种方式:
>
具有共轭条件的两个迭代器:
List<Foo> fooList = new ArrayList<>();
while (namesIterator.hasNext() && countsIterator.hasNext()) {
Foo foo = new Foo(namesIterator.next(), countsIterator.next());
fooList.add(foo);
}
int bound = Math.min(names.size(), counts.size());
List<Foo> fooList = new ArrayList<>();
for (int i=0; i<bound; i++) {
Foo foo = new Foo(names.get(i), counts.get(i);
fooList.add(foo);
}
List<Foo> fooList = IntStream.rangeClosed(0, Math.min(names.size(), counts.size()))
.mapToObj(i -> new Foo(names.get(i), counts.get(i)))
.collect(Collectors.toList());
还有一些外部库具有专用的压缩方法,如Guava的streams::zip
或Joo的seq::zip
。zipping机制在各个库中几乎是相同的。
目前Java流API的设计并不适合它。
我正在编写一个返回json的web服务api框架。我使用Jackson库反序列化json字符串。api返回一个属性来继续获取请求的结果。这样的回应: 所有的回答都有这样的结构。唯一的问题是continue属性的名称因请求而异。名字是这样的 我想只创建一个类,并且能够将json映射到这个类。我怎么能那样做?这是我想要的:
我有两个枚举,它们实现了如下相同的接口:- 名为SystemA和SystemB的两个枚举正在实现此接口。 我想要像这样应用getConfigFunction:- 但它会抛出编译时错误,因为形成的流的类型为:Config[]。所以我尝试了以下修改:- 但这也失败了,因为我还需要修改forEach部分。有人能帮忙吗?我该如何修改forEach部分,或者我该如何使用map()/flatmap()函数,这
我有以下代码来返回对象数组,对象数组中填充了基元类型的结构元素,我不知道如何将基元类型转换为jobject,然后使用SetObjectArrayElement方法设置为ObjectArray, 下面是我的C结构信息 我的JNI代码 写入核心转储失败。核心转储已被禁用。要启用核心转储,请在再次启动Java之前尝试“ulimit-c unlimited” 包含更多信息的错误报告文件保存为:/data1
问题内容: 我有一个由Java 8流表示的数据集: 我可以看到如何对其进行过滤以获取随机子集-例如 我还可以看到如何减少该流,例如得到两个表示数据集的两个随机一半的列表,然后将它们转换回流。但是,是否有直接方法可以从最初的一个生成两个流?就像是 感谢您的任何见解。 问题答案: 不完全是。您不可能一分之二。这没有道理-您将如何遍历一个而不需要同时生成另一个?流只能操作一次。 但是,如果要将它们转储到
我在处理流时遇到了一些麻烦。本质上,我有一个
我有以下型号 我试图通过名称和组名称获得一个实例。 我可以用下面的代码来做 但是我想把它变成一个查询。对如何实现这一点有什么想法吗?