Java Comparator将两个不同的字段相互比较

时间:2016-03-10 19:24:26

标签: java sorting

我想知道我是否可以使用比较器来比较两个不同的字段。一个简单的例子是制作一个线性链,其中每个Object都有一个头部和一个尾部,每个Object的头部和尾部将分别是另一个Object的尾部或头部。对于这个简单的例子,我假设所有对象都有一个头部和一个尾部,链条总是线性的,没有间隙。

public class Link {
    private Object head;
    private Object tail;
...
}

建立链条。我真的不在乎它是上升还是下降。

LinkedList<Link> chain ...
chain.sort((o1, o2) -> {

        if (o1 != null && o2 != null) {
            if (Objects.equals(o1.getHead(), o2.getTail())) {
                return -1;
            }

            if (Objects.equals(o1.getTail(), o2.getHead())) {
                return 1;
            }
        }

        return 0;
    });

这里的问题是,当原始列表顺序中相邻链接之间没有关系时返回零将意味着项目只保留在当前顺序中。我知道我可以通过原始列表和我建立的列表的更多手动迭代来实现这一目标,但我很好奇是否有办法通过比较器实现这一目标。

1 个答案:

答案 0 :(得分:0)

为了对物体进行分类,我们需要使头部和尾部具有可比性。例如,调用o1.getHead()。compare(o2.getTail())应该产生一个数字,指示头部是否位于尾部之前,反之亦然。

假设头部和尾部对象有比较器,我们可以这样做:

import numpy
numpy.set_printoptions(threshold=numpy.nan)