排序基于Java中不同成员的数据对象的列表(Sorting a list of objects ba

2019-09-17 03:42发布


我有这个类:

public class Friend {

private String name;
private String location;
private String temp;
private String humidity;

public String getTemp() {
    return temp;
}

public void setTemp(String temp) {
    this.temp = temp;
}

public String getHumidity() {
    return humidity;
}

public void setHumidity(String humidity) {
    this.humidity = humidity;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}


public String getLocation() {
    return location;
}

public void setLocation(String location) {
    this.location = location;
}
}

我想根据基于用户输入名称,位置,温度和湿度进行排序列表。
编辑:用户指定通过该数据成员排序有许多工作要做。
什么是最简单的方法是什么?
谢谢。

Answer 1:

Java有一个叫做静态函数Collections.sort(List, Comparator)其给出的排序其中,在相同类型的两个对象的自定义比较对象(泛型)名单,决定哪一个是之前的其他有序。

你的任务是写它创建了一个功能比较哪些订单是根据它的参数和用户指定排序顺序的对象。 例如:

public Comparator<Friend> getComparator(final String sortBy) {
  if ("name".equals(sortBy)) {
    return new Comparator<Friend>() {
      @Override int compare(Friend f1, Friend f2) 
        return f1.getName().compareTo(f2.getName());
      }
    };
  } else if ("location".equals(sortBy)) {
    return new Comparator<Friend>() {
      @Override int compare(Friend f1, Friend f2) 
        return f1.getLocation().compareTo(f2.getLocation());
      }
    };
  } else if ("temp".equals(sortBy)) {
    // ...
  } else {
    throw new IllegalArgumentException("invalid sort field '" + sortBy + "'");
  }
}


Answer 2:

因为要通过四个不同的标准对它们进行排序,实现可比没有意义。 在这种情况下,你可能会发现,每一个排序的参数创建不同的比较。 但是,你可以实现可比性最合乎逻辑的排序由外地,如姓名。 否则,比较器是要走的路。

public class FriendNameComparator extends Comparator<Friend> {

    // assuming both are non-null for code simplicity; you may wish to change that
    public int compare(Friend f1, Friend f2) {
        return f1.getName().compareTo(f2.getName());
    }
}

public class FriendLocationComparator extends Comparator<Friend> {

    // assuming both are non-null for code simplicity; you may wish to change that
    public int compare(Friend f1, Friend f2) {
        return f1.getLocation().compareTo(f2.getLocation());
    }
}

// and so forth

然后,你可以使用集合实用工具类的排序功能由给定的比较器进行排序。

Collections.sort(friendsList, new FriendNameComparator()); // sorts by name
Collections.sort(friendsList, new FriendLocationComparator()); // sorts by location
// etc


Answer 3:

List list=new ArrayList();

如果使用其他如果为每个标准:

if(location ){
        Collections.sort(list, new Comparator () {
             public int compare(YourObject o1, YourObject o2) {
                    return o1.getLocation().compareTo(o2.getLocation());
                }

        });

    }

    } else if(temp ){

    ........
    }
    .......


文章来源: Sorting a list of objects based on different data members in java