gpt4 book ai didi

java - 如何对列表<进行排序?延伸 T>

转载 作者:行者123 更新时间:2023-12-02 04:17:25 27 4
gpt4 key购买 nike

我有一个 list

List<? extends T> generics;

我们如何对此进行排序?是否可以在 Comparator 实现上比较子类对象?

谢谢

最佳答案

参见Collections.sort ,其中T必须implements Comparable<T>

但是我会绑定(bind)T到具有 final 的已知基类compareTo确保在比较苹果和梨时将它们视为水果

编辑:根据您的评论,您可以采用上面的建议,但可以替代实现 Comparable会写一个 Comparator并使用Collections.sort(List, Comparator)

不管怎样,如果你有苹果、梨或橙子,那么我建议创建一个抽象类 Fruit,并根据 Fruit 实现 Comparable/Comparator - 这是比较苹果和梨等的唯一明智的方法 - 通过已知的属性对所有子类都是通用的。

示例代码:

public abstract class Fruit implements Comparable<Fruit> {

public abstract String getName();

public abstract Integer getWeightInGrams();

@Override
public final int compareTo(Fruit other)
{
return getName().compareTo(other.getName());
}
}

public class Orange extends Fruit {

private final Integer weightInGrams;

public Orange(int weightInGrams)
{
this.weightInGrams = weightInGrams;
}

@Override
public String getName()
{
return "Orange";
}

@Override
public Integer getWeightInGrams()
{
return weightInGrams;
}
}


//Or just using comparators (in which case Fruit does not need to implement Comparable):

public class FruitWeightComparator implements Comparator<Fruit> {

@Override
public int compare(Fruit o1, Fruit o2)
{
return o1.getWeightInGrams().compareTo(o2.getWeightInGrams());
}
}


public class FruitNameComparator implements Comparator<Fruit> {

@Override
public int compare(Fruit o1, Fruit o2)
{
return o1.getName().compareTo(o2.getName());
}
}

关于java - 如何对列表<进行排序?延伸 T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33161034/

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