java 实现对象列表排序的问题

k4ymrczo  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(133)

我有一个对象列表,看起来像这样

List<Color> colorList = generateColorList(10);

System.out.println(colorList);

System.out.println(colorList.stream().sorted().collect(Collectors.toList())); //Sorting

// [Color{colors=[#91E7CE, #FCEF32, #859BDF], isPrimary=true, rgb={r=126, b=155, g=112}}, 
// Color{colors=[#E53DE3, #589003, #12AC95], isPrimary=false, rgb={r=111, b=140, g=232}}, 
// Color{colors=[#90381C, #83E0A5, #D88C51], isPrimary=false, rgb={r=234, b=154, g=3}}, 
// Color{colors=[#D40BF0, #8625B4, #CA1F2A], isPrimary=false, rgb={r=198, b=231, g=18}}, 
// Color{colors=[#FB1203, #970BFA, #7FEA33], isPrimary=false, rgb={r=238, b=7, g=56}}, 
// Color{colors=[#68FB95, #34DBE8, #8953EF], isPrimary=true, rgb={r=121, b=171, g=167}}, 
// Color{colors=[#9D85F3, #1455AE, #374475], isPrimary=false, rgb={r=225, b=177, g=70}}, 
// Color{colors=[#43466A, #F3CD61, #3962FB], isPrimary=false, rgb={r=12, b=163, g=194}}, 
// Color{colors=[#311731, #8BF4FD, #40EF0C], isPrimary=true, rgb={r=89, b=80, g=153}}, 
// Color{colors=[#9015A9, #603793, #62F78B], isPrimary=true, rgb={r=111, b=253, g=88}}]

它有三种数据类型,我在下面的课中列出了它们
我想按isPrimary字段对它们进行排序
Color.class

public class Color implements Serializable, Comparable {
    private List<String> colors;
    @JsonProperty("isPrimary")
    private boolean primary;
    private HashMap<String,Integer> rgb = new HashMap<String,Integer>();
    public Color(){};

public List<String> getColors() {
    return colors;
}

public void setColors(List<String> colors) {
    this.colors = colors;
}

public boolean GetIsPrimary() {
    return primary;
}

public void setIsPrimary(boolean primary) {
    this.primary = primary;
}

public HashMap<String, Integer> getRgb() {
    return rgb;
}

public void setRgb(HashMap<String, Integer> rgb) {
    this.rgb = rgb;
}

@Override
public String toString() {
    return "Color{" +
            "colors=" + colors +
            ", isPrimary=" + primary +
            ", rgb=" + rgb +
            '}';
}

@Override
public int compareTo(Object o) {
    Color o1 = (Color)this;
    Color o2 = (Color)o;
    return o1.GetIsPrimary().compareTo(o2.GetIsPrimary());
}

}
我试图重复我的导师,但他有字符串,我有布尔,它告诉我,方法compareTo没有解决(最后一个方法在颜色类)我如何才能使它工作?

ybzsozfc

ybzsozfc1#

您应该执行以下操作:

  • Comparable是通用接口,因此应为implements Comparable<Color>
  • 然后将compareTo方法更改为
public int compareTo(Color o) {
    return this.GetIsPrimary().compareTo(o.GetIsPrimary());
}
  • getterssettersprimary field更改为使用Boolean而不是boolean。然后您将能够使用compareTo,因为它现在是一个对象。

注:

  • 按照惯例,方法应该以小写字母开始。
  • 如果一个方法返回一个boolean,它的前面通常是is

还要注意的是,你不需要实现Comparable接口来排序。假设colorList是可变的,你可以在sort方法中使用Comparator来完成如下操作。

colorList.sort(Comparator.comparing(Color::GetIsPrimary));

相关问题