java - 关联评级和产品列表的映射 java
问题描述
我有产品,每个产品都有评级。我尝试的是:
public SortedMap<Double, List<String>> getProductsPerStars () {
SortedMap<Double, List<String>> productsPerStars = new TreeMap<>();
List<String> ps = new ArrayList<>();
for(Product p : products.values()) {
for(Rating r : ratings) {
System.out.println(r.getNumStars() + " " + r.getProductName());
if(r.getProductName() == p.getName()) {
System.out.println(this.getStarsOfProduct(p.getName()));
ps.add(p.getName());
// productsPerStars.put(key, value)
}
}
}
System.out.println(ps);
return productsPerStars;
}
getProductsPerStars() 方法给出了一个映射,该映射将平均星数与具有该平均值的产品名称列表相关联,平均值按降序排序,产品名称按字母顺序排序。没有评论的产品将被丢弃。
输出必须如下所示:
{4.0=[p2], 2.0=[p0, p1]}
我认为最好用流来做到这一点......但我不知道如何(因为我有一些错误......)。你能帮我么?
解决方案
尝试这个:
SortedMap<Double, List<String>> productsPerStars = new TreeMap<>(
ratings.stream().collect(groupingBy(Rating::getNumStars, Rating:: getProductName))
);
推荐阅读
- c - 有人可以解释一下为什么 C 中的 #include 指令允许包含“.h”文件以外的文件
- java - 验证涉及 LinkedList 的 3 个循环的 Big-O
- object - 我们如何在JS中提取2个对象的相交键及其相交值?
- excel - 我在 vba 中使用 AutoFilter 时遇到问题。出现错误 -2147417848 (80010108)
- docker - 组合后在docker容器中执行命令
- vscode-settings - Prettier 禁用某些语言不起作用
- c# - .net 核心解码的 JWT 声明类型与生成时使用的声明类型不匹配
- angular5 - ngxDaterangepickerMd in trigger event on selection of start/end date
- angular - 角度信号器问题
- android - 如何用Android RecyclerView表示列表里面的列表