如何在Java中发送多个参数进行compareTo过滤排序类型和排序依据? [英] How to send multiple arguments to compareTo to filter Sorting type and sort by in Java?

查看:81
本文介绍了如何在Java中发送多个参数进行compareTo过滤排序类型和排序依据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不是使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆