groupingBy应该使用String时,将key作为Map返回

时间:2015-10-01 15:32:54

标签: java java-8 java-stream

我们说我有一个品牌对象列表。 POJO包含一个返回字符串的getName()。我想建立一个 Map<String, Brand> 除此之外,字符串是名称...但我希望密钥不区分大小写

如何使用Java流来完成这项工作?尝试:

brands.stream().collect(Collectors.groupingBy(brand -> brand.getName().toLowerCase()));

不起作用,我认为是因为我没有正确使用groupBy。

1 个答案:

答案 0 :(得分:6)

Collect将结果转换为case insensitive map

Map<String, Brand> map = brands
     .stream()
     .collect(
          Collectors.toMap(
              Brand::getName, // the key
              Function.identity(), // the value
              (first, second) -> first, // how to handle duplicates
              () -> new TreeMap<String, Brand>(String.CASE_INSENSITIVE_ORDER))); // supply the map implementation

Collectors#groupBy在这里工作没有成功,因为它返回Map<KeyType, List<ValueType>>,但您不希望List作为值,您只需要{{1}从我所理解的内容来看。