Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/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
Java 按字母顺序排序地图_Java - Fatal编程技术网

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
中的lambda
TreeSet::new
。您可以使用
new
作为方法引用吗?哇,我不知道。是的,有很多很酷的方法参考。您甚至可以使用引用
String.class::cast
进行强制转换。或者
String.class::isInstance
用于
x实例的
String
等等。请注意,您可以用方法引用
TreeSet::new
替换
map
中的lambda。您可以使用
new
作为方法引用吗?哇,我不知道。是的,有很多很酷的方法参考。您甚至可以使用引用
String.class::cast
进行强制转换。或者
String.class::isInstance
用于
x字符串实例
等等。