我有下面的课
class Pojo1 {
pojo2 item;
}
class pojo2 {
pojo3 item;
}
class pojo3 {
pojo4 item;
}
Map<pojo4,Map<pojo3,List<pojo2>>> k=new HashMap()<>;
(pojo4 - some property)
(pojo3 - some property)
(pojo2- some property)
首先,提到的POJO类POJO4
和POJO3
需要实现hashcode
和equals
,以便用作映射键以及属性的相关getter。
转换应该使用公共collectors.Groupingby
/collectors.Mapping
收集器,并且需要将初始重新映射到两个对象的纯容器,例如Pair
。
下面的示例使用Java11map.entry
作为中间容器。
static Map<Pojo4, <Map<Pojo3, List<Pojo2>>>> convert(Stream<Pojo1> ones) {
return ones // Stream<Pojo1>
.map(Pojo1::getItem) // Stream<Pojo2>
.map(p2 -> Map.entry(p2, p2.getItem())) // Stream<Map.Entry<Pojo2, Pojo3>>
.collect(Collectors.groupingBy(
me -> me.getValue().getItem(), // key: Pojo4
Collectors.groupingBy(
me -> me.getValue(), // key: Pojo3
Collectors.mapping(
Map.Entry::getKey, Collectors.toList()
)
)
));
}
假设pojo2
、pojo3
、pojo4
有gettergetfield
,以便对属性进行排序,则提供以下更新:
static Map<Pojo4, <Map<Pojo3, List<Pojo2>>>> convert(Stream<Pojo1> ones) {
return ones
.map(Pojo1::getItem) // Stream<Pojo2>
.map(p2 -> Map.entry(p2, p2.getItem())) // Stream<Map.Entry<Pojo2, Pojo3>>
.collect(Collectors.groupingBy(
me -> me.getValue().getItem(), // key: Pojo4
() -> new TreeMap(Comparator.comparing(Pojo4::getField)),
Collectors.groupingBy(
me -> me.getValue(), // key: Pojo3
() -> new TreeMap(Comparator.comparing(Pojo3::getField)),
Collectors.mapping(
Map.Entry::getKey, Collectors.collectingAndThen(
Collectors.toList(), // List<Pojo2>
list -> {
list.sort(Comparator.comparing(Pojo2::getField));
return list;
}
)
)
)
));
}
免责声明:上面的代码示例没有经过测试,因此可能需要额外的调整。
我有一个像 我有一个用户对象列表,比如:示例数据 我的问题是,如何将此列表分组以了解品牌id出现在哪些对象中,例如品牌id=10出现在所有三个对象中,品牌id=30仅出现在一个对象中 带有 key=brand id 和 value = count 的地图的结果将解决我的问题,如下所示:{10:3},{20:1},{30,1},{50,1},{80,1 }
我正在使用我有一个类,如下所示: 现在我想做的是: 筛选出senderId无效的记录(使用映射) 下面是我的代码: 这给我带来了一个错误: 错误:(105,90)java:找不到适用于groupingBy(共享[…]的方法gMode,java。util。作用函数)方法java。util。流动收藏家。groupingBy(java.util.function.function)不适用(无法推断类型变
问题内容: 给出: 给出: 是否有准备使用的库/代码来完成它? 问题答案: 您将无法使用JSON.stringify序列化事件对象,因为事件对象包含对DOM节点的引用,并且DOM在各处都有循环引用(例如,子/父关系)。JSON默认情况下无法处理这些,因此您有点不走运。
问题内容: 我的数组是这样的: 我想将其转换为: 因此,基本上,分组依据。 我尝试着: 我只是不知道如何处理相似组值的分组。 问题答案: 首先,在JavaScript中,使用遍历数组通常不是一个好主意。 因此,您可以尝试执行以下操作: 在这里使用中间对象有助于加快处理速度,因为它可以避免嵌套循环搜索数组。另外,因为使用迭代遍历对象(而不是数组)是合适的。 附录 FWIW,如果要避免在结果数组中出现
我对Java8相当陌生。我需要将普通对象列表转换为按特定标准分组并在用户界面上显示。 地图的关键应该是“fromDate-todate”的组合,学生名单应该与此组合相关联 此外,“ClassOfMSWAN”对象需要转换为“Student”对象并保存到列表中 Java1的代码。7已编写,需要转换为Java1。八, 请帮帮我。
问题内容: 我的清单包含大小等的集合。我尝试这样做,但似乎不起作用。 我想要的最终结果是。 我可以尝试添加在所有的元素和那种出来再做出新的的。但是,有某种班轮吗? 更新: 这可行,但是可以简化吗? 问题答案: @Eugene的回答很甜蜜,因为番石榴很甜。但是,如果您碰巧在类路径中没有番石榴,这是另一种方式: 首先,我将所有集合映射到一个流中,然后对所有元素进行排序,最后,将整个排序后的流收集到集合