java - 使用自定义逻辑比较 2 个 java 列表
问题描述
我想比较 2 个 java 列表,其中包含 2 种不同类型的对象。但是,这两种类型的对象都有一些共同的属性,我想对它们进行比较。
class A {
int id;
}
class B {
int id2;
}
List<A> listA; // contains some objects
List<B> listB
// comparison logic
boolean isEqual = true;
if(listA.size() != listB.size())
isEqual = false;
for(int i=0;i<listA.size();++i) {
if(!listA.get(i).equals(listB.get(i)) {
isEqual = false;
break;
}
}
有没有一种通过java流简洁地编写这个的好方法?
解决方案
一种方法是使用IntStream
:
boolean equal = (IntStream.range(0, listA.size())
.filter(i -> listA.get(i).equals(listB.get(i))).count() == listA.size());
这不适用于不同大小的列表,但这只是一个简单的条件 ( listA.size() == listB.size()
),为简洁起见,我省略了。
编辑:
可以通过以下方式改进noneMatch()
:
boolean equal = IntStream.range(0, listA.size())
.noneMatch(i -> listA.get(i).id != listB.get(i).id2);
推荐阅读
- java - 寻找 REGEX 以匹配选择关闭字符串的组
- android - 如何将主页顶部的个人资料选项卡与颤动对齐?
- c# - 我收到“该进程无法访问该文件,因为它正被另一个进程使用”错误。有任何想法吗?
- python - Tkinter:发送变量以循环运行
- python - 在sqlite中插入大量数据
- javascript - React Hooks - 使用 lodash 的 deepCopy 不会导致重新渲染
- phpmyadmin - 基于主机的身份验证中 '%' 的 phpMyAdmin 用户名通配符
- java - 如何使用流 API 过滤连续元素?
- ms-access - Microsoft Access 创建隐藏表单
- node.js - 尽管有字段,但MongoDB查询结果为空