gpt4 book ai didi

java - 基于多个属性对List进行排序 Collection.sort() 编译错误

转载 作者:行者123 更新时间:2023-12-03 02:22:16 29 4
gpt4 key购买 nike

我需要使用多个属性对列表进行排序,我尝试了此代码,但收到编译错误

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);

说错了,

绑定(bind)不匹配:Collections 类型的泛型方法 sort(List) 不适用于参数 (List)。推断类型 Kot 不是有界参数的有效替代>

我做错了什么?

最佳答案

您需要为此实现Comparable接口(interface)。例如:

class Kot implements Comparable<Kot> {

private String productName;
private Integer kotNo;

public Kot() {
}

public Kot(String productName, Integer kotNo) {
this.productName = productName;
this.kotNo = kotNo;
}

@Override
public int compareTo(Kot kot1) {
int kotNoCompare = kot1.kotNo.compareTo(this.kotNo);
if (kotNoCompare == 0) {
int productNameCompare = kot1.productName.compareTo(this.productName);
return productNameCompare;
}
return kotNoCompare;
}
}

如果您只想使用Comparator,那么您必须将该比较逻辑移至单独的类中。 Kot 将仍然是一个简单的 POJO 类,仅包含 getter 和 setter。

例如比较器仅逻辑:

class Comp implements Comparator<Kot>{
@Override
public int compare(Kot kot1, Kot kot2) {
int kotNoCompare = kot1.getKotNo().compareTo(kot2.getKotNo());
if (kotNoCompare == 0) {
int productNameCompare = kot1.getProductName().compareTo(kot2.getProductName());
return productNameCompare;
}
return kotNoCompare;
}
}

现在要对列表进行排序,您可以使用其他排序方法:

Collections.sort(kots, new Comp());

关于java - 基于多个属性对List进行排序 Collection.sort() 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657280/

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