在 ArrayList() 中查找最常见的字符串

2022-09-04 05:27:52

有没有办法找到最常见的?StringArrayList

ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("test");
list.add("hello");
list.add("test");

应该从这个列表中找到“测试”这个词["test","test","hello","test"]


答案 1

不要重新发明轮子并使用类的方法:frequencyCollections

public static int frequency(Collection<?> c, Object o)

返回指定集合中等于指定对象的元素数。更正式地说,返回集合中元素 e 的数量,使得 (o == null ? e == null : o.equals(e))。

如果需要计算所有元素的出现次数,请使用 Map 并巧妙地循环:)或者将列表放在 Set 中,并使用上述方法循环使用该集的每个元素。呵呵frequency

编辑 / Java 8:如果你喜欢一个功能更强大的Java 8单行解决方案与lambdas,试试:

Map<String, Long> occurrences = 
  list.stream().collect(Collectors.groupingBy(w -> w, Collectors.counting()));

答案 2

在统计学中,这被称为“模式”。一个普通的Java 8解决方案看起来像这样:

Stream.of("test","test","hello","test")
      .collect(Collectors.groupingBy(s -> s, Collectors.counting()))
      .entrySet()
      .stream()
      .max(Comparator.comparing(Entry::getValue))
      .ifPresent(System.out::println);

这会产生:

test=3

jOOλ 是一个支持流上的 mode() 的库。以下程序:

System.out.println(
    Seq.of("test","test","hello","test")
       .mode()
);

收益 率:

Optional[test]

(免责声明:我为jOOλ背后的公司工作)