Java groupingBy在应该使用字符串时将键的对象作为映射返回

Java groupingBy在应该使用字符串时将键的对象作为映射返回,java,java-8,java-stream,collectors,Java,Java 8,Java Stream,Collectors,假设我有一个品牌物品清单。POJO包含一个返回字符串的getName()。我想建立一个 Map 以字符串作为名称,从中删除。。。但是我希望密钥不区分大小写 如何使用Java流实现这一点?尝试: brands.stream().collect(Collectors.groupingBy(brand -> brand.getName().toLowerCase())); 不起作用,我想这是因为我没有正确使用groupBy 将结果转换为 Map=brands .stream() .收集( 汤姆

假设我有一个品牌物品清单。POJO包含一个返回字符串的getName()。我想建立一个
Map
以字符串作为名称,从中删除。。。但是我希望密钥不区分大小写

如何使用Java流实现这一点?尝试:

brands.stream().collect(Collectors.groupingBy(brand -> brand.getName().toLowerCase()));
不起作用,我想这是因为我没有正确使用groupBy

将结果转换为

Map=brands
.stream()
.收集(
汤姆(
Brand::getName,//键
Function.identity(),//值
(第一,第二)->first,//如何处理重复项
()->新树映射(字符串.不区分大小写的顺序));//提供map实现

Collectors\groupBy
在这里不起作用,因为它返回一个
Map
,但你不想要一个
列表作为一个值,你只想要一个
品牌
,据我所知。

不-我马上意识到我不应该使用groupingBy,因为那会返回一个列表。让我再澄清一下退货类型。。。那里所以问题是它没有编译,因为它试图返回一个对象keyrios。我觉得我不应该使用这个实现,因为我的团队中没有人会理解它。哈!我相信这会随着时间的推移而改变,但解决方案肯定会奏效。顺便问一下:你能解释一下为什么groupingBy对我的情况不起作用吗?@IcedDante从你的问题来看,你似乎想要一张
地图
groupBy
将返回一个
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