Java 按字母顺序排序地图
您好,我被要求创建新问题,而不是在同一个线程中再次提问Java 按字母顺序排序地图,java,Java,您好,我被要求创建新问题,而不是在同一个线程中再次提问 public static void main(String[] args) throws IOException { getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(), StandardCharsets.UTF_8)).forEach(ite
public static void main(String[] args) throws IOException {
getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(),
StandardCharsets.UTF_8)).forEach(items -> {
for (String item : items) {
System.out.print(item + " ");
}
System.out.println();
});
}
private static String canonicalize(String string) {
return Stream.of(string.split("")).sorted().collect(Collectors.joining());
}
public static List<Set<String>> getAnagrams(Reader rr) {
Map<String, Set<String>> mapa = (Map<String, Set<String>>) new BufferedReader(rr).lines()
.flatMap(Pattern.compile("\\W+")::splitAsStream)
.collect(Collectors.groupingBy(Main::canonicalize, Collectors.toSet()));
return mapa.values().stream().filter(lista -> lista.size() > 4).collect(Collectors.toList());
}
publicstaticvoidmain(字符串[]args)引发IOException{
getAnagrams(新的InputStreamReader(新的URL)(“http://www.puzzlers.org/pub/wordlists/unixdict.txt“”。openStream(),
标准字符集.UTF_8)).forEach(项目->{
用于(字符串项:项){
系统输出打印(项目+“”);
}
System.out.println();
});
}
私有静态字符串规范化(字符串){
返回Stream.of(string.split(“”).sorted().collect(Collectors.joining());
}
公共静态列表getAnagrams(读取器rr){
Map mapa=(Map)新的BufferedReader(rr).lines()
.flatMap(Pattern.compile(“\\W+”)::splitAsStream)
.collect(Collectors.groupingBy(Main::canonicalize,Collectors.toSet());
返回mapa.values().stream().filter(lista->lista.size()>4.collect(Collectors.toList());
}
}
我如何将我的输出排序为“邪恶的列维生活面纱邪恶”?因为现在我有“面纱邪恶邪恶的列维生活”
更新
最后一件事是按字母顺序对输出进行排序
现在=“邪恶的利维活着面纱卑鄙,亚伯能干的贝尔贝拉厄尔巴”
Needed=“abel abel bale bela elba,邪恶的levi live veil vile”这是我能想到的最简单的方法
return mapa.values().stream()
.filter(lista -> lista.size() > 4)
.map(set -> new TreeSet<>(set))
.collect(Collectors.toList());
返回mapa.values().stream()
.filter(lista->lista.size()>4)
.map(设置->新建树集(设置))
.collect(Collectors.toList());
TreeSet
将其元素排序。以下是我能想到的最简单的方法
return mapa.values().stream()
.filter(lista -> lista.size() > 4)
.map(set -> new TreeSet<>(set))
.collect(Collectors.toList());
返回mapa.values().stream()
.filter(lista->lista.size()>4)
.map(设置->新建树集(设置))
.collect(Collectors.toList());
TreeSet
对其元素进行排序。要对集合列表还是列表中的集合进行排序?如果集合然后使用已排序的集合(例如,TreeSet
)。另一种可能是对值进行排序,然后将它们收集到保留插入顺序的集合中,如LinkedHashSet
。但是,如果以后添加元素,则集合将不会保存已排序的数据。为此,您需要排序的数据结构。在集合
s中,树集合
将是一个很好的候选者。当然,分拣不是免费的。需要搜索元素的操作,如包含
、添加
、删除
等。只在O(log n)
中运行,而不在O(1)
中运行(如哈希集
)。您想排序什么,是集合列表还是列表中的集合?如果集合然后使用已排序的集合(例如,TreeSet
)。另一种可能是对值进行排序,然后将它们收集到保留插入顺序的集合中,如LinkedHashSet
。但是,如果以后添加元素,则集合将不会保存已排序的数据。为此,您需要排序的数据结构。在集合
s中,树集合
将是一个很好的候选者。当然,分拣不是免费的。需要搜索元素的操作,如包含
、添加
、删除
等。仅在O(log n)
中运行,而不在O(1)
中运行(如在哈希集
中),您可以用方法引用替换map
中的lambdaTreeSet::new
。您可以使用new
作为方法引用吗?哇,我不知道。是的,有很多很酷的方法参考。您甚至可以使用引用String.class::cast
进行强制转换。或者String.class::isInstance
用于x实例的String
等等。请注意,您可以用方法引用TreeSet::new
替换map
中的lambda。您可以使用new
作为方法引用吗?哇,我不知道。是的,有很多很酷的方法参考。您甚至可以使用引用String.class::cast
进行强制转换。或者String.class::isInstance
用于x字符串实例
等等。