我有
List<Shop> shops;
class Shop {
private Long id;
private String name;
private List<Supplier> suppliers;
}
class Supplier {
private Long id;
private String supplierName;
}
我想要的是
Map<Supplier, List<Shop>> supplierShopsMap;
如何使用Java Streams进行操作?
答案 0 :(得分:3)
您应该覆盖equal()
课程中的hashCode()
和Supplier
进行分组。
Map<Supplier, List<Shop>> result = shops.stream()
.flatMap(s -> s.getSuppliers().stream()
.map(sup -> new SimpleEntry<>(sup, s))
.collect(groupingBy(Entry::getKey, // This step requires Supplier equal function
mapping(Entry::getValue, toList())));
如果您无法修改Supplier
课程以支持equal()
,那么您必须创建Supplier
修改强>
正如@jorn vernee指出的那样,我们可以直接使用flatMap
而不先收集到列表中。这是一个巨大的推动力