基于多属性集合的java排序列表。sort()编译错误
我需要使用多个属性对列表进行排序,我尝试了这段代码,但遇到了编译错误
package com.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import lombok.Data;
import lombok.extern.log4j.Log4j;
@Log4j
public class TestSort {
public static void main(String[] args) {
List<Kot> kots = new ArrayList<Kot>(){{
add(new Kot("aa",1));
add(new Kot("vv",1));
add(new Kot("zz",2));
add(new Kot("bb",3));
add(new Kot("cc",1));
}};
log.info(kots);
Collections.sort(kots);
log.info(kots);
}
}
@Data
class Kot implements Comparator<Kot> {
private String productName;
private Integer kotNo;
public Kot(){}
public Kot(String productName,Integer kotNo){
this.productName = productName;
this.kotNo = kotNo;
}
@Override
public int compare(Kot kot1, Kot kot2) {
int kotNoCompare = kot1.kotNo.compareTo(kot2.kotNo);
if (kotNoCompare == 0) {
int productNameCompare = kot1.productName.compareTo(kot2.productName);
return productNameCompare;
}
return kotNoCompare;
}
}
在下一行中显示错误
Collections.sort(kots);
错误地说
绑定不匹配:类型集合的泛型方法排序(列表)不适用于参数(列表)。推断类型Kot不是有界参数的有效替代品>
我做错了什么
# 1 楼答案
我想你需要分类
kotNo
productName
事实上,这件事由来已久。使用Java 8,您只需要一行代码
# 2 楼答案
您使您的
Kot
成为Kot
的Comparator
。但是,sort()
方法期望Kot
成为Comparable
其他Kot
的Kot
:您还可以将类拆分为
Kot
和KotComparator
,将比较器逻辑移动到KotComparator
,并使用sort()
重载,该重载使用自定义比较器进行排序# 3 楼答案
您需要为此实现
Comparable
接口。 例如:如果只想使用
Comparator
,那么必须将该比较逻辑移动到单独的类中Kot
仍然是一个简单的POJO类,只包含getter和setter例如
Comparataor
纯逻辑:现在,要对列表进行排序,可以使用其他排序方法: