gpt4 book ai didi

java - 如何在java中对具有多个数据排序的对象列表进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:33 24 4
gpt4 key购买 nike

我在 pojo 类中有很多单值排序示例。

但我想用多个值排序,如下例所示

排序前

Name          City           Roll
--------------------------------------

sekhar ---------bbsr------------23
himanshu -------agra------------23
nitin ----------delhi------------23
nitin ----------delhi------------22
nitin ----------bbsr------------23
arun -----------patna------------23
arun -----------kendrapara-------23

排序后

Name          City           Roll
--------------------------------------

arun -------kendrapara------------23
arun -------patna------------23
himanshu ----agra------------23
nitin -------bbsr------------23
nitin -------delhi------------22
nitin -------delhi------------23
sekhar -------bbsr------------23

我的代码在这里

package example;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Demo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo demo = new Demo();
List<Student> list = new ArrayList<Student>(); // your Car list
Student st = demo.new Student();
st.setName("sekhar");
st.setCity("bbsr");
st.setRoll(23);
list.add(st);
st = demo.new Student();
st.setName("himanshu");
st.setCity("agra");
st.setRoll(23);
list.add(st);
st = demo.new Student();
st.setName("nitin");
st.setCity("delhi");
st.setRoll(23);
list.add(st);
st = demo.new Student();
st.setName("nitin");
st.setCity("delhi");
st.setRoll(22);
list.add(st);
st = demo.new Student();
st.setName("nitin");
st.setCity("bbsr");
st.setRoll(23);
list.add(st);
st = demo.new Student();
st.setName("arun");
st.setCity("patna");
st.setRoll(23);
list.add(st);
st = demo.new Student();
st.setName("arun");
st.setCity("kendrapara");
st.setRoll(23);
list.add(st);
System.out.println("before sort");
System.out.println("Name:" + "-------------------" + "City...........roll");
for (Student st1 : list) {
System.out.println(st1.getName() + " --------------" + st1.getCity() + "------------" + st1.getRoll());
}

Collections.sort(list, demo.new CarHorsePowerComparator());
System.out.println("after sort");
System.out.println("Name:" + "-------------------" + "City...............roll");
for (Student st1 : list) {
System.out.println(st1.getName() + " --------------" + st1.getCity() + "------------" + st1.getRoll());
}
}

public class Student {

String name;
String city;
int roll;

public int getRoll() {
return roll;
}

public void setRoll(int roll) {
this.roll = roll;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getName() {
return name;
}

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

class CarHorsePowerComparator implements Comparator<Student> {
public int compare(Student stu, Student stu1) {
int sort = (stu.getName() + stu.getCity() + stu.getRoll()).compareTo((stu1.getName() + stu1.getCity() + stu1.getRoll()));
return sort;
}
}
}

但我正在使用自定义比较器

class CarHorsePowerComparator implements Comparator<Student> {
public int compare(Student stu, Student stu1) {
int sort = (stu.getName() + stu.getCity() + stu.getRoll()).compareTo((stu1.getName() + stu1.getCity() + stu1.getRoll()));
return sort;
}

它对我有用,但不是正确的方法。如何以正确的方式编写此代码请给我建议。

int sort = (stu.getName() + stu.getCity() + stu.getRoll()).compareTo((stu1.getName() + stu1.getCity() + stu1.getRoll()));

最佳答案

(stu.getName() + stu.getCity() + stu.getRoll()).compareTo((stu1.getName() + stu1.getCity() + stu1.getRoll())) 

表示您正在连接名称、城市和卷号并对结果字符串进行排序。

您应该首先确定排序优先级,然后按该顺序对字段进行排序。查看预期结果似乎您想先按名称排序,然后按城市排序,最后按滚动排序。

class CarHorsePowerComparator implements Comparator<Student> {
public int compare(Student stu, Student stu1) {
int sort;
// Sort on Name first
sort = stu.getName().compareTo(stu1.getName);
if(sort == 0){
// If name is equal, sort on city
sort = stu.getCity().compareTo(stu1.getCity);
}
if(sort == 0){
// If name and city is equal, sort on Roll
sort = Integer.compare(stu.getRoll(),stu1.getRoll());
}
return sort;
}
}

关于java - 如何在java中对具有多个数据排序的对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445989/

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