我无法在ArrayList中找到最常用和最不常见的名称。该公式应该通过一个名称文件,并计算列表中有多少常用名称,然后打印最少和最常见的名称。我已经完成了最多的ArrayList部分,它只是找到了我遇到麻烦的最常见和最不常见的名字。我不知道如何启动它。我试图在网上看但却找不到任何东西。我试图弄明白,但这是我能想到的就是使用.equals。
for (int i = 0; i< dogs.size(); i++)
if dogs.get(0).getName().equals dogs.get(i).getName();
{
}
答案 0 :(得分:1)
Map<String, Integer>
。ArrayList
,检查Map
是否包含name
,如果包含Map
,请将值递增并将其重新放回Map
,它没有,创建一个新的条目并将其放入。这将为您提供名称列表和出现的次数。运行此列表(List<Dog> dogs = new ArrayList<>(25);
Map<String, Integer> dogNames = new HashMap<>(25);
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);
)并检查哪一个具有最低计数,然后跟踪名称...
例如......
{{1}}
答案 1 :(得分:1)
使用Map
收集数据,然后使用Collections API查找最低数据:
List<Dog> dogs; // populate
Map<String, Integer> counts = new HashMap<>();
for (Dog dog : dogs) {
Integer count = counts.get(dog.getName());
counts.put(dog.getName(), count == null ? 1 : count + 1);
}
List<Map.Entry<String, Integer>> entries = new ArrayList<>(counts.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return Integer.compare(o2.getValue(), o1.getValue()); // Note reverse order
}
});
String leastCommonName = entries.get(0).getKey();
int leastCommonFrequency = entries.get(0).getValue();
这是找到最少使用名称的java 8版本:
Map.Entry<String, Integer> min = counts.entrySet().stream()
.min((o1, o2) -> Integer.compare(o1.getValue(), o2.getValue())).get();
String leastCommonName = min.getKey();
int leastCommonFrequency = min.getValue();
基本上避免了列表创建和排序,取而代之的是使用同一个比较器从一个流(条目)中找到最小值的一行,但是作为一个lambda表达式。