首页 > 解决方案 > 关联评级和产品列表的映射 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]}

我认为最好用流来做到这一点......但我不知道如何(因为我有一些错误......)。你能帮我么?

标签: javacollectionsjava-stream

解决方案


尝试这个:

SortedMap<Double, List<String>> productsPerStars = new TreeMap<>(
    ratings.stream().collect(groupingBy(Rating::getNumStars, Rating:: getProductName))
);

推荐阅读