gpt4 book ai didi

java - 使用 Java 8 搜索字谜

转载 作者:行者123 更新时间:2023-12-03 03:38:14 24 4
gpt4 key购买 nike

我必须编写程序,该程序应该读取字谜文件并显示单词+他的字谜。 Txt文件很大,使用扫描仪后,listOfWords大小为:25000。

输出示例:

word anagram1 anagram2 anagram3 ...
word2 anagram1 anagram2...

我有代码,它可以工作,但速度很慢:

  private static List<String> listOfWords = new ArrayList<String>();
private static List<ArrayList<String>> allAnagrams = new ArrayList<ArrayList<String>>();

public static void main(String[] args) throws Exception {
URL url = new URL("www.xxx.pl/textFile.txt");
Scanner scanner = new Scanner(url.openStream());
while (scanner.hasNext()) {
String nextToken = scanner.next();
listOfWords.add(nextToken);
}
scanner.close();

while (listOfWords.isEmpty() == false) {
ArrayList<String> anagramy = new ArrayList<String>();
String wzor = listOfWords.remove(0);
anagramy.add(wzor);
char[] ch = wzor.toCharArray();
Arrays.sort(ch);
for (int i = 0; i < listOfWords.size(); i++) {
String slowo = listOfWords.get(i);
char[] cha = slowo.toCharArray();
Arrays.sort(cha);
if (Arrays.equals(ch, cha)) {
anagramy.add(slowo);
listOfWords.remove(i);
i--;
}
}
allAnagrams.add(anagramy);
}

for (ArrayList<String> ar : allAnagrams) {
String result = "";
if (ar.size() > 1) {
for (int i = 1; i < ar.size(); i++) {
result = ar.get(i) + " ";
}
System.out.println(ar.get(0) + " " + result);
}
}
}

我必须用 Java 8 - 流来编写它,但我不知道。是否可以使用 Streams 读取 URL + 搜索字谜?你能帮我通过 Stream 搜索字谜吗?老师告诉我,代码应该比我的阅读整个列表更短。只有几行,可能吗?

最佳答案

您可以将文件中的单词读入列表或直接创建它的流:

try (InputStream is = new URL("http://www.someurl.pl/file.txt").openConnection().getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
Stream<String> stream = reader.lines()) {
//do something with stream
}

然后只需流式传输列表并收集字谜词,其中具有相同排序字符列表的所有单词都被视为字谜词:

Map<String, List<String>> anagrams =
stream.collect(Collectors.groupingBy(w -> sorted(w)));

排序方法只是对字母进行排序,就像您在示例中所做的那样:

public static String sorted(String word) {
char[] chars = word.toCharArray();
Arrays.sort(chars);
return new String(chars);
}

关于java - 使用 Java 8 搜索字谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40756599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com