尝试比较两个列表中的两个属性。我通常比较它迭代两个列表并比较每个元素(我认为这不是最优的)。比如:
list1.forEach(x -> {
list2.forEach(y -> {
if (x.getId().compareTo(y.getId()) == 0)
x.setMyAttribute(y.getNameAttribute());
});
});
有没有更好的方法来比较两个列表中的特定属性?我仍然不知道如何使用HashMap
,但我想知道是否使用HashMap
进行比较更好,以及如何使用它。
我想我只能用id
和name
(我需要的属性)创建一个HashMap
。
1条答案
按热度按时间g2ieeal71#
您所分享的基本上是一个蛮力解决方案,它针对
list1
中的每个元素检查list2
中的每个元素。为了避免执行冗余的迭代,可以通过生成一个
HashMap
来索引list2
的内容,该HashMap
将一个特定的元素与它的id
相关联。我将假定
id
的 * 自然顺序 * 与它的equals/hashCode
实现一致,即(x.compareTo(y)==0) == (x.equals(y))
,因为这是推荐的做法(如果您使用id
标准JDK类,如Long
、String
、UUID
,情况就是这样)。这就是它的实现方式: