在 ArrayList() 中查找最常见的字符串
有没有办法找到最常见的?String
ArrayList
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("test");
list.add("hello");
list.add("test");
应该从这个列表中找到“测试”这个词["test","test","hello","test"]
有没有办法找到最常见的?String
ArrayList
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("test");
list.add("hello");
list.add("test");
应该从这个列表中找到“测试”这个词["test","test","hello","test"]
不要重新发明轮子并使用类的方法:frequency
Collections
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()));
在统计学中,这被称为“模式”。一个普通的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
System.out.println(
Seq.of("test","test","hello","test")
.mode()
);
收益 率:
Optional[test]
(免责声明:我为jOOλ背后的公司工作)