我正在尝试使用比较器对嵌套的VO进行排序。我可以使用集合排序来做到这一点,但是intellij显示警告,我们必须使用比较器。但是当我们有带有嵌套对象的对象列表时,我无法弄清楚这种用法。
报告比较器定义为lambda表达式,可以使用诸如Comparator.comparing()之类的方法来表示。一些比较器 像(person1,person2)-> person1.getName()。compareTo(person2.getName())可以简化 像这样:Comparator.comparing(Person :: getName)。还建议 用Comparator.thenComparing()替换链比较,例如整型 res = o1.first.compareTo(o2.first); if(res == 0)res = o1.second.compareTo(o2.second); if(res == 0)res = o1.third- o2。第三;返回资源;将被替换为 objs.sort(Comparator.comparing((Obj o)-> o.first).thenComparing(o-> o.second).thenComparingInt(o-> o.third));
这是我的课程
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()));
我可以更改它以使用比较器吗?
答案 0 :(得分:0)
我模拟了您的问题。
我建议采用以下替代方法作为纠正此警告的正确方法:
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());
}
}
答案 1 :(得分:0)
Collections.sort(list,
Comparator.comparing(sbVO -> sbVO.getSortBaseVO2().getB().concat(sbVO.getSortBaseVO2().getD())));
如果您按“ alt + Enter”,然后单击“用比较器替换”,则可以获得相同的答案。