gob*_*ler 2 java sorting collections lambdaj
我喜欢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();
Run Code Online (Sandbox Code Playgroud)
Pet*_*iuk 12
在官方的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);
}
Run Code Online (Sandbox Code Playgroud)
下行:
有一个非lambdaj第三方方法用法.ComparatorUtils.chainedComparator
- 它来自apache commons集合.如果你没有将它作为项目中的依赖项,那么你可以自己编写.它只是通过所有比较器迭代,直到非零返回.
归档时间: |
|
查看次数: |
3632 次 |
最近记录: |