我有
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?
您应该覆盖 equal() 和 hashCode() 在里面 Supplier 用于分组的类。
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())));
如果无法修改 供应商 要支持的类 相等() 然后您必须创建 供应商
供应商
相等()
编辑
正如@jorn vernee指出的,我们可以使用 flatMap 直接收集而不首先收集到列表中。这是一个巨大的推动
flatMap