Java 8 Stream - 为地图找到最大数量<String, List<Object>>

Java 8 Stream - Find greatest amount for Map<String, List<Object>>

如何在 Map<String,List<Account>>

中找到 max sold
  class Account {
     String hashId;
     String address;
     BigDecimal sold;
  }

我看到了这个讨论,但我不能根据我的情况修改它,我必须搜索所有列表以获得最大的销售价值。

你可以这样做。这假定您有 getter。它 return 是包含最高销量的帐户。

给出

Map<String, List<Account>> accounts = null;

所有值中最好的

  • 平面化值
  • 比较售价
  • return 与 get
Account best =
        accounts.values().stream().flatMap(Collection::stream)
                .max(Comparator.comparing(Account::getSold))
                .get();

每个键的最佳

  • 流式传输 entrySet
  • 将其映射到现有密钥
  • 然后流式传输每个列表并比较值,得到最大值
Map<String, Account> bestOfEach = accounts.entrySet().stream()
        .collect(Collectors.toMap(Entry::getKey,
                e -> e.getValue().stream()
                        .max(Comparator
                                .comparing(Account::getSold))
                        .get()));

如果您只想要最大值 sold 而没有别的,您可以执行以下操作:

我假设您的 Map 名为“地图”,并且 sold 有一个名为 getSold 的 getter。

这将 return 一个具有最大值的 Optional。

map.values()
   .stream()
   .flatMap(listOfAccounts -> listOfAccounts.stream().map(Account::getSold))
   .max(BigDecimal::compareTo);