我必须实现 maxPricePerProductType 方法,该方法返回产品类型出价的最高价格,产品按字母顺序排序。不考虑没有投标的产品。该方法的原型(prototype)是:

public SortedMap<String, Integer> maxPricePerProductType() { //use toMap

    return null;
}

我的课是
public class GroupHandling {
    private Map<String, Group> groups = new HashMap<>();

    public SortedMap<String, Integer> maxPricePerProductType() { //use toMap

         return null;
      }
}

public class Group {
    private String name;
    String productType;
    Map<String, Bid> bids = new HashMap<>();

    public String getProductType() {
        return productType;
    }
}
public class Bid {
    String name;
    Group g;
    int price;

    public int getPrice() {
        return price;
    }

    public String getProductType(){
        return g.productType;
    }
}

每个组都对购买某种类型的产品感兴趣,并且在 map bids 中注册了该组必须购买的产品的选项。例如,Group G1 想要购买智能手机,他们有 3 个出价:B1、B2 和 B3。 B1 10,B2 15 和B3 7。G2 也想购买智能手机。它有 2 个出价。 B4 花费 5,B5 花费 20。所以我必须取 B1、B2、B3、B4 和 B5(因为它们都是同一产品类型的出价)并添加到排序映射 B5 作为键和 20 作为值。简而言之,我需要从每个组中获取出价,按产品类型对它们进行分组,然后将价格最高的添加到排序 map 中。
这就是我试图做的:
public SortedMap<String, Integer> maxPricePerProductType() { //use toMap
    return groups.values().stream().
            flatMap(g -> g.bids.values().stream())
            .
             ;
}

但我不知道如何继续,或者这部分是否正确。

最佳答案

这有点误导 private Map<String, Gruppo> groups = new HashMap<>();Map<String, Bid> bids = new HashMap<>(); 所持有的内容。如果这些映射中的键是 B1, B2...G1, G2... - 实际名称,那么您实际上并不需要它们 - 因为无论如何这些信息都存在于它们中。所以这些真的应该是 List s。

如果还有其他事情,您可以使用:

 SortedMap<String, Integer> result = groups
            .values()
            .stream()
            .filter(g -> g.getBids() != null || !g.getBids().isEmpty())
            .flatMap(g -> g.getBids().values().stream())
            .collect(Collectors.groupingBy(b -> b.getGroup().getProductType(),
                    TreeMap::new,
                    Collectors.mapping(Bid::getPrice,
                            Collectors.collectingAndThen(Collectors.maxBy(Comparator.naturalOrder()), Optional::get))));

关于java - sortedMap 上的操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44866021/

10-13 04:35