gpt4 book ai didi

java - 查找 ArrayList 中使用最多和最少的字符串

转载 作者:行者123 更新时间:2023-12-01 12:33:04 25 4
gpt4 key购买 nike

我无法在 ArrayList 中找到最常用和最少使用的字符串。该程序应该遍历一个字符串文件并计算列表中有多少个多个字符串。然后打印列表中最少和最常用的名称。 ArrayList部分已经完成。它只是找到我遇到困难的最常见和最不常见的名字。我什至不知道如何开始。这是我在网上找到的,但它不起作用。

Map<String, Integer> dogNames = new HashMap<>();
for (Dog dog : dogs) {
Integer value = dogNames.get(dog);
if (value == null) {
value = 0;
}
value++;
dogNames.put(dog.getName(), value);
}

int leastCommon = Integer.MAX_VALUE;
String leastCommonName = null;
for (String name : dogNames.keySet()) {
int value = dogNames.get(name);
if (value < leastCommon) {
leastCommon = value;
leastCommonName = name;
}
}

System.out.println("Least common (" + leastCommon + ") is " + leastCommonName);

最佳答案

您的代码的问题似乎出在这一行:

Integer value = dogNames.get(dog);

您的 map 包含狗名称 (String),但您获取的 Dog 条目并不存在!因此,即使您以前见过该名称,value 仍为 0。如果你解决了这个问题,你的代码应该可以工作。

<小时/>

您还可以根据 map 中的计数定义自定义 Comparator,然后使用 Collections.minCollections.max:

Comparator<Dog> comp = new Comparator<Dog>() {
@Override
public int compare(Dog o1, Dog o2) {
return Integer.compare(dogNames.get(o1.getName()), dogNames.get(o2.getName()));
}
};
System.out.println("least " + Collections.min(dogs, comp));
System.out.println("most " + Collections.max(dogs, comp));

使用 Java 8,您可以使用 Comparator.comparing 使其变得更短:

List<Dog> dogs = ...
Map<String, Integer> dogNames = new HashMap<>();
dogs.forEach(dog -> dogNames.put(dog.getName(), dogNames.getOrDefault(dog.getName(), 0) + 1));

Comparator<Dog> comp = Comparator.comparing(d -> dogNames.get(d.getName()));
System.out.println("least " + Collections.min(dogs, comp));
System.out.println("most " + Collections.max(dogs, comp));

或者更短,使用Collections.Frequency而不是构建自己的 map ,并使用它进行比较。但请注意,如果列表很长,这将是浪费的,因为这将每次重新搜索列表,而不是在 map 中缓存计数。

List<Dog> dogs = ...
Comparator<Dog> comp = Comparator.comparing(d -> Collections.frequency(dogs, d.getName()));
System.out.println("least " + Collections.min(dogs, comp));
System.out.println("most " + Collections.max(dogs, comp));

关于java - 查找 ArrayList 中使用最多和最少的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25788469/

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