gpt4 book ai didi

java - Java 中的 lambdaj 和多重排序条件

转载 作者:行者123 更新时间:2023-12-03 21:45:20 31 4
gpt4 key购买 nike

我爱lambdaj并经常使用它,但我似乎无法弄清楚是否可以使用多种排序条件对列表进行排序。

这是一个使用 Google Collections 的例子.在 lambdaj 中可以做同样的事情吗?

先按颜色再按名称排序:

Function<Fruit, Color> getColorFunction = new Function<Fruit, Color>() {
public Color apply(Fruit from) {
return from.getColor();
}
};

Function<Fruit, String> getNameFunction = new Function<Fruit, String>() {
public String apply(Fruit from) {
return from.getName();
}
};

Ordering<Fruit> colorOrdering = Ordering.natural().onResultOf(getColorFunction);
Ordering<Fruit> nameOrdering = Ordering.natural().onResultOf(getNameFunction);

Ordering<Fruit> colorAndNameOrdering = colorOrdering.compound(nameOrdering);

ImmutableSortedSet<Fruit> sortedFruits = ImmutableSortedSet.orderedBy(
colorAndNameOrdering).addAll(fruits).build();

最佳答案

官方 Lambdaj 页面上没有提供这样做的示例,但在每次调用 sort 时,Lambdaj 都会为给定参数创建比较器。下面是一个如何按多个属性排序的示例。

排序:

public static void main(String... args) {
final Comparator byName = new ArgumentComparator(on(Fruit.class).getName());
final Comparator byColor = new ArgumentComparator(on(Fruit.class).getColor());
final Comparator orderBy = ComparatorUtils.chainedComparator(byName, byColor);

final List<Fruit> unsorted = Arrays.asList(...);

final List<Fruit> sorted = sort(unsorted, on(Fruit.class), orderBy);

System.out.println(sorted);
}

缺点:

有一种非 lambdaj 第 3 方方法用法。 ComparatorUtils.chainedComparator - 它来自 apache commons 集合。如果你的项目中没有这个作为依赖项,你可以自己编写。它只是遍历所有比较器,直到返回非零值。

关于java - Java 中的 lambdaj 和多重排序条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9794647/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com