jef*_*405 5 java dictionary list java-stream
我正在尝试将多个不必要的Web请求合并到一个地图中,并将密钥连接到某个位置的ID,并且该值是该位置的产品列表。
这个想法是通过为每个位置创建一个单个请求并映射到它的所需产品列表来减少对我的Flask服务器的请求数量。
我已经尝试使用Java 8的流功能找到其他遇到类似问题的人,但是我找不到试图将其追加到地图列表中的任何人。
例;
public class Product {
public Integer productNumber();
public Integer locationNumber();
}
List<Product> products = ... (imagine many products in this list)
Map<Integer, List<Integer>> results = products.stream()
.collect(Collectors.toMap(p -> p.locationNumber, p -> Arrays.asList(p.productNumber));
Run Code Online (Sandbox Code Playgroud)
同样,第二个p参数不能访问流中的当前产品。
因此,当位置编号与现有列表匹配时,我无法测试是否可以追加到列表。我不相信可以使用Arrays.asList(),因为我相信它是不可变的。
最后,地图上每个位置的列表中应包含许多产品编号。是否可以将Integers附加到映射中预先存在的列表中?
你可以这样做
Map<Integer, List<Integer>> res = products.stream()
.collect(Collectors.groupingBy(Product::locationNumber,
Collectors.mapping(Product::productNumber, Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)