java - groupingBy 在应该使用 String 时将键的对象作为 Map 返回

标签 java java-8 java-stream collectors

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

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

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

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

最佳答案

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作为一个值,你只需要一个 Brand ,据我了解。

关于java - groupingBy 在应该使用 String 时将键的对象作为 Map 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32891490/

相关文章:

java - Paint 方法执行多次

java - 有没有一种优雅的方法来打开包裹在 2 个嵌套的 Optionals 中的对象?

java - 过滤时如何从 map 中恢复列表(使用流)

java - Java 8 Stream 中的一些 Stateful Intermediate Operation 仍然是 Lazy seeking

java - 计算 myClickHandler 函数不起作用

java - J2ME聊天应用程序?

java - 为什么在 Lucene 4,1 分析器中使用 MappingCharFilter 会破坏通配符匹配

java - ScheduledExecutorService - 程序在一次性操作后未结束

java - 如何使用 java 8 Lambdas 和线程池实例化对象或调用 setter 以传递来自不同线程的值?

java - 在消费者方法中创建的 Lambda Collect 元素