Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java8,创建字符串的排序和分组列表的最简洁方法是什么_Java_Sorting_Lambda_Group By_Java 8 - Fatal编程技术网

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

使用Java8,创建字符串的排序和分组列表的最简洁方法是什么,java,sorting,lambda,group-by,java-8,Java,Sorting,Lambda,Group By,Java 8,使用Java8,创建字符串排序和分组列表的最简洁方法是什么?使用Lambdas和Collections and Streams框架展示旧方法和新方法 您可以以旧(或新)方式显示使用第三方库(常用库) 但是,我建议使用vanilla Java,因为它显示了Java8中的语言更改为任务表带来的更改 Input: List<String> Output: Map<Character<List<String>> The key of map is 'A' to

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

您可以以旧(或新)方式显示使用第三方库(常用库)

但是,我建议使用vanilla Java,因为它显示了Java8中的语言更改为任务表带来的更改

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

输出:Map使用Java,没有第三方库的帮助,有旧方法和新方法。过去,对集合进行排序很容易

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

 - Input: List<String>
 - Output: Map<Character,<List<String>>
 - The key of map is 'A' to 'Z'
 - Each list in the map are sorted.
-输入:列表
-输出:Map it.charAt(0));
系统输出打印项次(结果);
源数据已作为“流”的新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);
Map结果=流
.苹果、香蕉、芒果、香蕉、啤酒)
.已排序()
.collect(Collectors.groupingBy(it->it.charAt(0)))
系统输出打印项次(结果);

使用流行的第三方库,与Java 6兼容:

TreeMultimap<Character, String> multimap = TreeMultimap.create();
for (String string : list) {
  multimap.put(string.charAt(0), string);
}
return Multimaps.asMap(ImmutableListMultimap.copyOf(multimap));
TreeMultimap multimap=TreeMultimap.create();
用于(字符串:列表){
multimap.put(string.charAt(0),string);
}
返回Multimaps.asMap(不可变列表multimap.copyOf(multimap));
这会消除重复字符串,因此允许重复字符串的替代版本:

ImmutableListMultimap.Builder<Character, String> builder = 
  ImmutableListMultimap.builder();
for (String string : Ordering.natural().sortedCopy(list)) {
  builder.put(string.charAt(0), string);
}
return Multimaps.asMap(builder.build());
ImmutableListMultimap.Builder=
ImmutableListMultimap.builder();
for(字符串:Ordering.natural().sortedCopy(列表)){
builder.put(string.charAt(0),string);
}
返回Multimaps.asMap(builder.build());

您所说的“分类和分组”是什么意思?你是如何将它们分组的?(以及“旧方法”是否允许使用第三方库?)请注意:如果列表打算用作流,则可以替换
stream.of()
。@KevinO也许您可以详细说明一下。你为什么不发布一个备选答案,让大家都明白你的方法。不是真正的新答案,只是一个可能派上用场的备选答案。您的Java8示例是:
Map result=Stream.of(“苹果”、“安娜”、“芒果”、“香蕉”、“啤酒”).sorted().collect(收集器.groupingBy(it->it.charAt(0))
@KevinO我明白了。很好的解释。我想展示在转换过程中发生了什么,而不是真正的源代码是什么,无论是流、列表、集合、Iterable还是。。。如果用户已经有一个流,他们就不需要首先调用.Stream()方法。我们中的一些人仍然使用你知道的列表!很多数据现在和将来都会出现在列表中。但我会采纳你的建议。谢谢
TreeMultimap<Character, String> multimap = TreeMultimap.create();
for (String string : list) {
  multimap.put(string.charAt(0), string);
}
return Multimaps.asMap(ImmutableListMultimap.copyOf(multimap));
ImmutableListMultimap.Builder<Character, String> builder = 
  ImmutableListMultimap.builder();
for (String string : Ordering.natural().sortedCopy(list)) {
  builder.put(string.charAt(0), string);
}
return Multimaps.asMap(builder.build());