我有一个来自以下用户的消息列表:
aaa hi
bbb hello
ccc Gm
aaa Can?
CCC yes
ddd No
我想从这个消息对象列表中计数并显示AAA(2)+BBB(1)+CCC(2)+DDD(1)
。有代码帮助吗?
您可以使用map
,其中键表示单个字符串,map值是每个字符串的计数器。
所以你可以这样做:
// where ever your input comes from: turn it into lower case,
// so that "ccc" and "CCC" go for the same counter
String item = userinput.toLowerCase();
// as you want a sorted list of keys, you should use a TreeMap
Map<String, Integer> stringsWithCount = new TreeMap<>();
for (String item : str) {
if (stringsWithCount.contains(item)) {
stringsWithCount.put(item, stringsWithCount.get(item)+1));
} else {
stringsWithCount.put(item, 0);
}
}
然后您可以在完成后迭代映射:
for (Entry<String, Integer> entry : stringsWithCount.entrySet()) {
Arrays.stream(someListOrArrayContainingItems)
.collect(Collectors
.groupingBy(s -> s, TreeMap::new, Collectors.counting()))
.entrySet()
.stream()
.flatMap(e -> Stream.of(e.getKey(), String.valueOf(e.getValue())))
.collect(Collectors.joining())
我有一个过程对象列表,如下所示 我的程序课就像 我想基于以下条件对对象进行排序和分组。 应根据过程名称对所有过程进行分组。 过程必须按过程日期降序排列。[日期列表中的第一个元素,即 分组在一起的相同过程应按日期降序排列。 最终结果必须是, 我能够使用比较器和旧的Java代码实现这一点。是否可以使用java8流、收集器和分组来实现相同的功能?
我有如下列表: 列表 但是,这给了一张地图。我不需要地图,我需要名单。 我怎么能这么做?
问题内容: 我的数组是这样的: 我想将其转换为: 因此,基本上,分组依据。 我尝试着: 我只是不知道如何处理相似组值的分组。 问题答案: 首先,在JavaScript中,使用遍历数组通常不是一个好主意。 因此,您可以尝试执行以下操作: 在这里使用中间对象有助于加快处理速度,因为它可以避免嵌套循环搜索数组。另外,因为使用迭代遍历对象(而不是数组)是合适的。 附录 FWIW,如果要避免在结果数组中出现
我想在到期日对一个Retrient对象集合进行分组,但我想为每个组创建一个新的RentalReport对象,其中键是预定义的值(枚举),并且组是该对象的属性。我通过根据每个条件拟合集合并为每个条件创建一个RentalReport对象来实现这一点,但我想知道是否可以使用Collectors类的groupingBy方法来实现这一点。 有没有可能在Java 8中按一组预定义的过滤器进行分组,这样我就可以
问题内容: 假设我有一个列表(或集合): 我想返回一个ImmutableList(Set),它以自然顺序对术语进行排序/分组,其中以“ src”开头的术语排在第一位,“ assoc”第二位,而“ dest”排在最后。如果一个术语不包含这些术语,则应将其从结果列表中删除。 因此,这里的结果是“ srcB”,“ srcT”,“ assocX”,“ destA”。 我想我可以通过Iterables.fi
我最近接触了Java 8和它的Stream API,最近又接触了它的Collectors API,我发现它有潜力对Stream进行很多很多的转换,但我有一个情况,我不确定Java 8是否可能,甚至根本不可能。我有两个类: 我想知道是否可以从ClassA对象列表中生成一个ClassB对象的分组列表,该列表的值是从ClassA的字段中计算出来的。具体而言: 通过group和ID组合对类进行分组 当关键