如何使用Java 8 Streams API对列表进行排序和排序

时间:2019-07-07 18:21:20

标签: java java-stream

给出以下对象列表:

final List<BusinessUnit> unorderedUnits = Arrays.asList(
            new BusinessUnit("OTHER"),
            new BusinessUnit("BUELL"),
            new BusinessUnit("HARLEY_DAVIDSON"),
            new BusinessUnit("VINTAGE")
        );

我正在尝试重新排列以上列表的顺序,以使列表中的所有其他对象的顺序为“ HARLEY_DAVIDSON”,“ VINTAGE”,“ BUELL”。

我试图通过以下方式实现这一目标:

unorderedUnits.sort(comparingInt(f -> asList("HARLEY_DAVIDSON", "VINTAGE", "BUELL").indexOf(f.getName())));

结果:

result.forEach(r -> System.out.println(r.getName()));

OTHER
HARLEY_DAVIDSON
VINTAGE
BUELL

请注意,OTHER元素位于正确排序的元素之前。

如何确保OTHER元素(和其他任何元素)位于与sort中列出的属性值相对应的元素之后?

1 个答案:

答案 0 :(得分:0)

以下comparator

unorderedUnits.sort(comparingInt(n -> ordered.indexOf(n.getName()) == -1 ? ordered.size() : ordered.indexOf(n.getName())));

达到我想要的输出:

HARLEY_DAVIDSON
VINTAGE
BUELL
OTHER