我有类似以下内容:
public class MyClass {
private Long stackId
private Long questionId
}
例如100的集合,其中stackid可以使用不同的questionId复制。stackId和questionId之间的一对多关系
是否有一种 流式的 Java 8方式可以转换为以下结构:
public class MyOtherClass {
private Long stackId
private Collection<Long> questionIds
}
这将是25个的集合,每个实例具有4个QuestionId的嵌套集合。
输入:
[{1,100},{1,101},{1,102},{1,103},{2,200},{2,201},{2,202},{1,203}]
输出量
[{1, [100,101,102,103]},{2,[200,201,202,203]}]
Stream API的直接方法涉及2条Stream管道:
Map<Long, List<Long>>
的stackId
到questionIds
。这是通过groupingBy(classifier, downstream)
收集器完成的,在收集器中我们根据对进行分类,stackId
并将具有相同值的值stackId
映射到它们的questionId
(和mapping
),并使用收集到列表中toList()
。MyOtherClass
实例,并将其收集到一个列表中。假设您有一个构造函数MyOtherClass(Long stackId, Collection<Long> questionIds)
,示例代码将是:
Map<Long, List<Long>> map =
list.stream()
.collect(Collectors.groupingBy(
MyClass::getStackId,
Collectors.mapping(MyClass::getQuestionId, Collectors.toList())
));
List<MyOtherClass> result =
map.entrySet()
.stream()
.map(e -> new MyOtherClass(e.getKey(), e.getValue()))
.collect(Collectors.toList());
使用StreamEx库,您可以在单个Stream管道中执行此操作。该库提供了pairing
和first
收集器。这样可以配对两个收集器,并对两个收集的结果执行整理器操作:
stackId
分组元素中的第一个(根据构造,它们将全部相同)questionId
并收集到一个列表中。MyOtherClass
。样例代码:
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
import static one.util.streamex.MoreCollectors.first;
import static one.util.streamex.MoreCollectors.pairing;
// ...
Collection<MyOtherClass> result =
StreamEx.of(list)
.groupingBy(
MyClass::getStackId,
pairing(
collectingAndThen(mapping(MyClass::getStackId, first()), Optional::get),
mapping(MyClass::getQuestionId, toList()),
MyOtherClass::new
)
).values();
我的数组是这样的: 我想把这个转换成: 所以,基本上,按分组。 我正在尝试: 我只是不知道如何处理相似组值的分组。
我正在做一个项目,我正在与返回JSON响应的第三方服务集成。我正在使用Jackson将响应反序列化为JavaPOJO。响应是一个对象,它有几个Jackson能够轻松解析的简单字段。但是响应还包含一个带有单个条目的数组,该条目也是一个对象。当Jackson尝试反序列化它时,我得到了包含列表中单个条目的顶级对象,但是列表中单个条目的所有字段都是空的。知道我在这里做错了什么吗? 更新:将FAIL\u O
我有一个关于KML中的组的问题。 我有一个数据集,由50个对象组成。这些对象具有属性,即F.E严重性。有没有可能根据这些严重性类对我的KML文档进行分类?(1/1.5/2)还是基于任何其他属性?我已经手动创建了文件夹,但数据集越大,工作量就越大...我也想为对象着色,基于分类。附上我将添加我的文档。也许有人知道如何处理这件事?
问题内容: 我的数组是这样的: 我想将其转换为: 因此,基本上,分组依据。 我尝试着: 我只是不知道如何处理相似组值的分组。 问题答案: 首先,在JavaScript中,使用遍历数组通常不是一个好主意。 因此,您可以尝试执行以下操作: 在这里使用中间对象有助于加快处理速度,因为它可以避免嵌套循环搜索数组。另外,因为使用迭代遍历对象(而不是数组)是合适的。 附录 FWIW,如果要避免在结果数组中出现
有人知道一种方法(如果可能的话也可以使用lodash)通过对象键对对象数组进行分组,然后根据分组创建新的对象数组吗?例如,我有一个汽车对象数组: 我想制作一个由分组的新汽车对象数组:
问题内容: 问题在于确定以下符号之间的权衡: 基于JSON : 基于数组 : 关于同一问题的这篇文章,我已经决定(在前端)使用JSON对象表示法而不是对象数组,因为它符合我的要求,更好的性能和更少的浏览器代码。 但是问题在于列表本身不是静态的。我的意思是,该列表正在生成,即从DB(NoSQL)获取/存储,并通过服务器上的JavaAPI为新条目创建。我无法决定在后端应使用哪种表示法(最终也会影响UI