【发布时间】:2020-06-24 22:03:52
【问题描述】:
我有产品,每个产品都有评分。 我尝试的是:
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]}
我认为最好用流来做到这一点......但我不知道如何(因为我有一些错误......)。 你能帮帮我吗?
【问题讨论】:
-
你有什么错误?顺便说一句:您将
Strings 与==进行比较,不要那样做。 -
我在尝试处理流时出错(我不知道如何使用lamba 函数...)抱歉== 但不是这个问题。
-
忽略任何可能的流解决方案并手动执行此操作。你从来没有将你的
ps列表添加到productsPerStars,为什么? -
我必须列出产品列表,然后为每个评级关联产品列表,但我不知道如何...
-
哎呀:
r.getProductName() == p.getName()没有做你希望做的事。 User.getProductName().equals(p.getName())instead.
标签: java collections java-stream