最有效的代码来比较列表

时间:2017-10-03 11:39:10

标签: java collections java-8 comparison java-stream

我有这些课程:

Object 1
 String label
 List<Object2>

Object2
 String label
 List<Object3>

Object3
 String label

我想比较两个Object1列表。 这就是我所做的:

public class Object1 implements Comparator<Object1> {
    @Override
    public int compare(Object1 o1, Object1 o2) {
     int compare = o1.getLabel().compareTo(o2.getLabel());
        if (compare == 0) {
            Iterator<Object2> iterator1 = o1.getObjects2().iterator();
            Iterator<Object2> iterator2 = o2.getObjects2().iterator();
            while (iterator1.hasNext() && iterator2.hasNext() && compare == 0) {
                Object2 t1 = iterator1.next();
                Object2 t2 = iterator2.next();
                compare = t1.getLabel().compareTo(t2.getLabel());
            }
        }
        return compare;
}

我为Object2做了同样的事。

我通过以下代码在代码中调用Object1来对其进行排序:

SomeObject.getListOfObject1().stream().sorted();

还有其他方法“清洁”吗?我觉得我错过了一些东西......

2 个答案:

答案 0 :(得分:0)

  1. 首先,我建议您使用Collections.sort(..)直接对列表进行排序

  2. 其次,我将compare(..)方法实施到所有Object1Object2Object3。如果您希望将来使用这些对象创建更复杂的结构,它们将已经实现。

  3. 最后,实施equals()hashCode()方法。

答案 1 :(得分:0)

您可以采用的一种简单方法是覆盖对象的equals()hash()方法,然后使用列表的equals()方法比较两个列表,例如: list1.equals(list2);