java - 使用java8过滤器比较两个整数列表
问题描述
我有一个问题如下。有两个大小相等的整数列表 a 和 b。现在我想比较同一索引处的两个列表值。我的函数返回具有 2 个值的列表。第一个值是列表 a 中较大值的计数。第二个值是列表 b 中较大值的计数。如果两者具有相同的值,则计数没有增加。
我可以知道如何使用流/过滤器/谓词在 java8 中实现它吗
我在较旧的 java 版本中重新运行了该方法。
static List<Integer> compareTriplets(List<Integer> a, List<Integer> b) {
List<Integer> list = new ArrayList<Integer>();
int asize = 0;
int bsize = 0;
for (int i = 0; i <b.size();i++) {
if(a.get(i) > b.get(i)) {
asize++;
}else if(a.get(i) < b.get(i)) {
bsize++;
}
}
list.add(asize);
list.add(bsize);
return list;
}
例如1。输入:a =5 6 7 b = 3 6 10 输出:1 1 例如 2。输入:a = 17 28 30 b = 99 16 8 输出:2 1
解决方案
首先过滤掉所有相等的值。然后创建一个带有布尔键的映射,表示 in 中的给定值a
是小于还是大于 in 中的对应值b
。最后使用计数收集器获取每个类别的计数。这是它的外观。
Collection<Long> gtAndLtCount = IntStream.range(0, a.size())
.filter(i -> a.get(i) != b.get(i)).boxed()
.collect(Collectors.partitioningBy(i -> a.get(i) < b.get(i), Collectors.counting()))
.values();
推荐阅读
- pandas - 有没有办法计算一行中大于 Pandas 中“变量”值的值的数量?
- swiftui - swiftui Textfield 将光标移动到每次更改结束
- javascript - Bootstrap 切换按钮在移动屏幕上不起作用?
- hadoop - 我们如何在 hadoop 中为每个文件设置块大小?
- google-chrome-extension - Chrome 扩展:html 解析创建对象而不是源代码(清单 v3)
- sql - SQL Server LEAD 函数
- c++ - C++ 中的 @ 是什么以及为什么在 C++ 头文件中使用它?
- scala - Scala构造函数上的“发生在之前”:最终字段
- .net - 如何修复非共享成员需要对象引用错误?
- jquery - Ajax 响应未定义