java - 使用 Java 8,创建排序和分组字符串列表的最简洁方法是什么

标签 java sorting lambda group-by java-8

使用 Java 8,创建排序和分组字符串列表的最简洁方法是什么?展示使用 Lambdas 和 Collections and Streams 框架的旧方法和新方法。

您可以用旧的(或新的)方式展示使用第 3 方库(流行的库)。

但是,我建议使用 vanilla Java,因为它显示了 Java 8 中的语言变化为任务表带来的变化。

Input: List<String>
Output: Map<Character<List<String>>
The key of map is 'A' to 'Z'
Each list in the map are sorted.

它将被排序和分组,这样......

给定这个列表:“啤酒”、“苹果”、“香蕉”、“凤梨”、“芒果”、“蓝莓”

Map 将生成包含第一个字母作为键。 map 中的值将是所有以该键(字母)开头的单词的排序 List:

  • 键:A 值:["Ananas","Apple"]
  • 键:B 值:["Banana","Beer","Blue Berry"]
  • 键:M 值:["Mango"]

最佳答案

在没有第 3 方库帮助的情况下使用 Java,有旧方法和新方法。使用 Collections.sort(..) 过去很容易进行排序。

旧方法的挑战在于需要大量代码来对值进行分组。

 - Input: List<String>
 - Output: Map<Character,<List<String>>
 - The key of map is 'A' to 'Z'
 - Each list in the map are sorted.

旧Java

List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer"); 
Map<Character, List<String>> result = new HashMap<Character, List<String>>(); 
for(String k : keywords) {   
    char firstChar = k.charAt(0);     
    if(!result.containsKey(firstChar)) {     
        result.put(firstChar, new  ArrayList<String>());   
    }     
    result.get(firstChar).add(k); 
} 
for(List<String> list : result.values()) {   
    Collections.sort(list); 
}
System.out.println(result); 

新Java 8

List<String> keywords = Arrays.asList("Apple", "Ananas", "Mango", "Banana", "Beer");

Map<Character, List<String>> result = keywords.stream()
     .sorted()
     .collect(Collectors.groupingBy(it -> it.charAt(0)));

System.out.println(result);

新的 Java 8,源数据已经作为“流”

根据@KevinO 的建议

 Map<Character, List<String>> result = Stream
      .of( "Apple", "Ananas", "Mango", "Banana","Beer")
      .sorted()
      .collect(Collectors.groupingBy(it -> it.charAt(0)))

System.out.println(result);

关于java - 使用 Java 8,创建排序和分组字符串列表的最简洁方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19635179/

相关文章:

java - 无法从 .net Web 服务获取 JSONArray

c# - 使用特定区域性进行排序 - 在丹麦语和挪威语中, "BB"可能先于 "AA"

ruby - 从字符串创建一个 ruby​​ Proc

java - 在类之间传递数组值

java - 尝试使用maven程序集插件时出现 "Assembly is incorrectly configured: null"

java - Hibernate - 在预加载事件上使字段 transient

string - Haskell Lambda 折叠

java - 这个项目进展如何?

c++ - c++中排序函数的工作

haskell - 与 lambda 表达式组合 haskell