gpt4 book ai didi

java - 使用比较器对 VO 的嵌套列表进行排序

转载 作者:行者123 更新时间:2023-12-02 02:33:26 40 4
gpt4 key购买 nike

我正在尝试使用比较器对嵌套 VO 进行排序。我可以使用集合排序来完成此操作,但 intellij 显示警告我们必须使用比较器。但当我们有带有嵌套对象的对象列表时,我无法弄清楚这种用法。

Reports Comparators defined as lambda expressions which could be expressed using methods like Comparator.comparing(). Some comparators like (person1, person2) -> person1.getName().compareTo(person2.getName()) could be simplified like this: Comparator.comparing(Person::getName). Also suggests to replace chain comparisons with Comparator.thenComparing(), e.g. int res = o1.first.compareTo(o2.first); if(res == 0) res = o1.second.compareTo(o2.second); if(res == 0) res = o1.third - o2.third; return res; will be replaced with objs.sort(Comparator.comparing((Obj o) -> o.first).thenComparing(o -> o.second).thenComparingInt(o -> o.third));

这是我的类(class)

public class SortBaseVO {

public SortBaseVO(String prop1, String prop2, String prop3, String prop4, String sortBaseVO2) {
this.prop1 = prop1;
this.prop2 = prop2;
this.prop3 = prop3;
this.prop4 = prop4;
this.sortBaseVO2 = sortBaseVO2;
}

private String prop1;

private String prop2;

private String prop3;

private String prop4;

private String sortBaseVO2;

public String getSortBaseVO2() {
return sortBaseVO2;
}

public void setSortBaseVO2(String sortBaseVO2) {
this.sortBaseVO2 = sortBaseVO2;
}

public String getProp1() {
return prop1;
}

public void setProp1(String prop1) {
this.prop1 = prop1;
}

public String getProp2() {
return prop2;
}

public void setProp2(String prop2) {
this.prop2 = prop2;
}

public String getProp3() {
return prop3;
}

public void setProp3(String prop3) {
this.prop3 = prop3;
}

public String getProp4() {
return prop4;
}

public void setProp4(String prop4) {
this.prop4 = prop4;
}

}

B类

public class SortBaseVO2 {


private String a;

private String b;

private String c;

private String d;

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}

public String getB() {
return b;
}

public void setB(String b) {
this.b = b;
}

public String getC() {
return c;
}

public void setC(String c) {
this.c = c;
}

public String getD() {
return d;
}

public void setD(String d) {
this.d = d;
}

}

当前完成的排序是sortBaseVOList是sortBaseVO的列表

Collections.sort(sortBaseVOList , (sortBaseVO1, sortBaseVO2) ->
sortBaseVO1.getsortBaseVO2().getB().concat(sortBaseVO1.getsortBaseVO2().getD())
.compareTo(sortBaseVO2.getsortBaseVO2().getB().concat(sortBaseVO2.getsortBaseVO2().getD()));

我可以更改它以使用比较器吗?

最佳答案

我模拟了你的问题。

我建议使用以下替代方法作为修复此警告的正确方法:

List<SortBaseVO> sortBaseVOList = new ArrayList<>();
Collections.sort(sortBaseVOList , Comparator.comparing(SortBaseVO::getConcat));

在 SortBaseVO 类中,您必须定义以下方法:

public class SortBaseVO {

// all other methods

public String getConcat() {
return getSortBaseVO2().getB().concat(getSortBaseVO2().getD());
}
}

关于java - 使用比较器对 VO 的嵌套列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57218177/

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