我有一个Thing对象列表:
class Thing {
public String id;
public String name;
}
<代码>列表
[{'1', 'AB'},{'2', 'CD'},{'1', 'AB'},{'1','AB'},{'2','CD'},{'3','EF'}]
现在,我想使用Java streams或任何util函数来获得id的不同计数:我希望输出为,
id count
1 3
2 2
3 1
我如何才能实现这一点?
也可以使用toMap收集器:
lst.stream().collect(toMap(Thing::getId, v -> 1, Math::addExact));
创建地图
或地图::合并:
Map<String, Integer> accumulator = new HashMap<>();
lst.forEach(t -> accumulator.merge(t.getId(), 1, Math::addExact));
与上面的想法相同,如果
Thing::getId
已经存在于累加器
映射中,我们将它们与Math::addExact
合并,否则我们将提供的键和值累加到映射中。
如果订单如您的帖子所示重要,那么您可以使用
LinkedHashMap
而不是上面的HashMap
。
您还可以提供一个映射,将元素累积到其中以保持
toMap
收集器中的顺序:
lst.stream().collect(toMap(Thing::getId, v -> 1, Math::addExact, LinkedHashMap::new));
或使用
groupingBy
收集器:
lst.stream()
.collect(Collectors.groupingBy(Thing::getId,
LinkedHashMap::new,
Collectors.counting()));
您可以使用收集器获取它。按id属性分组,然后计算其出现次数,如下所示:
List<Thing> objects = new ArrayList<>(); // initalise as in the question
Map<String, Long> countForId = objects.stream()
.collect(Collectors.groupingBy(Thing::getId, Collectors.counting()));
我想用不同的列值执行相同的SQL查询,即:我有一个如下表: 从上表中,我想获取员工组的和。请建议我如何在不执行多次的情况下进行查询以获取上述数据。
所以这个问题以前被问过,但我的情况有点不同,因为我已经尝试了这个网站中建议的所有解决方案,我有一个多提及数组: 我还有另一个小数组: 我只想找到与这个“dup”在同一行的“original”。到目前为止,我尝试了查找、过滤和grep,但这些都没有解决我的问题。 我尝试过的代码:
给定这样一组对象: 是否有一种方法可以使用ES6在一组对象中找到匹配的对象关键点(本例中为playerId),然后为这些匹配组合其他对象关键点(辅助和点),以便最终的数组如下所示:
我正在尝试编写一个方法,该方法可以在列表列表中找到对象的索引并利用并行性。这是我的代码。 当我运行以下代码时 输出类似于 换句话说,即使在找到对象之后,搜索仍在继续。不应该是短路操作吗?我错过了什么?此外,在迭代列表或锯齿数组时,利用并行性的最佳方法是什么? 编辑 按照@Sotirios回答中的想法,我得到了以下输出 请注意 即使找到答案也继续搜索。
我正在试图理解为什么下面的代码会像它那样运行。具体而言,为什么第一个表达式会输出的完整和最终版本?我意识到这和吊装有关(也许?)或者其他一些我没有完全理解的概念。只是在网上搜索这个是很有挑战性的,因为我没有合适的词库来搜索我想知道的东西。 我在为自己编写代码时发现了这一点,其中我希望通过for-loop看到对象在每次迭代时的状态。我很惊讶地看到输出到控制台的对象在每一个回合都是一样的;该状态是整个
我有一个数组。如何按类型、名称和大小以及递增量找到双重许可。增加数量后删除相同的。