gpt4 book ai didi

Java比较器对重复值进行排序

转载 作者:行者123 更新时间:2023-12-02 03:55:37 24 4
gpt4 key购买 nike

我对这段代码感到困惑,我的主要目标是我想对 order.name 是否相同进行排序,否则 -1 或 +1 对我来说很好。

预期输出结果:

 "abc"   "abc"   "def"   "ghi"   "ijk"

但是程序正在做一些不同的事情。我在这里错过了什么吗?

`import java.util.*;
public class Test1 {

public static void main(String a[]) {

List<Order> list = new ArrayList<Order>();

list.add(new Order(10, "abc"));
list.add(new Order(20, "def"));
list.add(new Order(10, "abc"));
list.add(new Order(40, "ghi"));
list.add(new Order(50, "ijk"));

Collections.sort(list, new CustComparator());

System.out.println(" For Loop Results");
for (Order object : list) {
System.out.println(((Order) object).getName());
}

}

static class CustComparator implements Comparator<Order> {

@Override
public int compare(Order o1, Order o2) {
if (o1.getName().equals(o2.getName())) {
System.out.println(" This line of code is not executing ");
return 0;
} else {
System.out.println(" This line of code is executing ");
return -1;
}

}

}

static class Order {

public Order() {
}

public Order(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

private int id;
private String name;

public String getName() {
return name;
}

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

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Order other = (Order) obj;
/*
* if (id != other.id) return false;
*/
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
}`

程序输出是这样的:

This line of code is executing    
This line of code is executing
This line of code is executing
This line of code is executing

For 循环结果

ijk  
ghi
abc
def
abc
<小时/>

谢谢大家,感谢大家的回复,

最后我做了这样的事情,因为我正在寻找所有“abc”应该在顺序中首先显示。这是我的自定义比较器。

static class CustComparator implements Comparator<Order> {

@Override
public int compare(Order o1, Order o2) {

int old=getModuleIndex(o1.getName());
int new1 = getModuleIndex(o2.getName());
if (old == new1) {
return 0;
} else if(old > new1){
return 1;
} else {
return -1;
}

}
int getModuleIndex(String obj) {
if(obj.equals("abc")) {
return 1;
} else {
return 2;
}
}

}

最佳答案

您可以这样做:编辑compare()方法

public int compare(Order o1, Order o2) {
return o1.getName.compareTo(o2.getName);
}

注意:比较对象时,需要返回3个值:如果参数字符串等于该字符串,则返回0。如果该字符串小于字符串参数,则为小于 0 的值。如果该字符串大于字符串参数,则返回一个大于 0 的值。

关于Java比较器对重复值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35497457/

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