如何在Java中发送多个参数进行compareTo过滤排序类型和排序依据? [英] How to send multiple arguments to compareTo to filter Sorting type and sort by in Java?
问题描述
我不是使用Java 8,而是Java 6
I am not using Java 8 but Java 6
我想向程序发送参数以进行排序
I want to send argument to program to sort
1)(按数量)或(按desc)和
1) (by Quantity) or (by desc) and
2)升序或降序.
无法了解如何在compareTo()中实现此检查
Unable to get idea how to implement this check in compareTo()
以下是Javacode:
Following is Javacode:
package no.java6.listsort;
public class Fruit implements Comparable<Fruit>{
private int quantity;
private String desc;
public Fruit()
{
}
public Fruit(String desc, int quantity)
{
this.desc = desc;
this.quantity = quantity;
}
public int getQuantity() {
return quantity;
}
public String getDesc() {
return desc;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public int compareTo(Fruit o) {
return o.getDesc().compareTo(this.getDesc());
//here i want to add if condition; To Sort on what and to sort by ascending or descending
}
}
以下是执行代码:
package no.java6.listsort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Execute {
public void implement()
{
List<Fruit> fruits = new ArrayList<>();
Fruit f1 = new Fruit("Sachin",80);
Fruit f2 = new Fruit("Anjali",70);
Fruit f3 = new Fruit("Harpreet",90);
Fruit f4 = new Fruit("Rupinder",100);
fruits.add(f1);
fruits.add(f2);
fruits.add(f3);
fruits.add(f4);
for(int i=0;i<fruits.size();i++)
{
System.out.println("Desc = "+fruits.get(i).getDesc()+"; Quantiity: "+fruits.get(i).getQuantity());
}
Collections.sort(fruits);
for(int i=0;i<fruits.size();i++)
{
System.out.println("Desc = "+fruits.get(i).getDesc()+"; Quantiity: "+fruits.get(i).getQuantity());
}
}
public static void main(String args[])
{
new Execute().implement();
}
}
推荐答案
如果您希望以不同的方式进行排序,则需要许多不同的比较器或一个动态比较器.这里是一个动态比较器的例子:
If you like to sort in different ways you need many different comparators or one dynamic comparator. Here an example of dynamic comparator:
public class DynamicFruitComparator implements Comparator<Fruit>{
private static int compareBy = 0;
public DynamicFruitComparator(int compareBy) {
this.compareBy = compareBy;
}
public DinamycComparator compareBy(int compareBy) {
this.compareBy = compareBy;
return this;
}
public int compare(Fruit a, Fruit b) {
if (compareBy == 0) {
return .... // First criteria
} else if (compareBy == 1) {
return .... // Second criteria
}
}
}
要简单地使用它
DynamicFruitComparator d0 = new DynamicFruitComparator (0);
DynamicFruitComparator d1 = new DynamicFruitComparator (1);
List<Fruit> list = ....
Collections.sort(list, d0); // To sort by criteria 0
Collections.sort(list, d1); // To sort by criteria 1
如果您不喜欢创建十个不同的比较器,则可以重复使用相同的dinamyc比较器,每次都设置排序标准.
If you don't like to create ten different comparators you can reuse the same dinamyc comparator setting the sort criteria each time.
DynamicFruitComparator d = new DynamicFruitComparator (0);
List<Fruit> list = ....
Collections.sort(list, d); // To sort by criteria 0
...
Collections.sort(list, d.compareBy(1)); // To sort by criteria 1
...
Collections.sort(list, d.compareBy(5)); // To sort by criteria 5
...
Collections.sort(list, d.compareBy(0)); // Again with criteria 0
这篇关于如何在Java中发送多个参数进行compareTo过滤排序类型和排序依据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!