【发布时间】:2021-05-14 08:00:54
【问题描述】:
我有一个小问题让我发疯。
我有一个
-
List<Integer>带 ID。 -
List<ObjectA>有 3 个变量: 一个 id 和两个字符串
我必须通过将第一个列表中包含的 id 元素放在顶部,然后按字符串 asc 和第二个字符串 asc 对第二个列表进行排序。
完成这项工作的最简单方法是什么?我正在尝试使用 .sort()、比较器等。
一个例子:
@Getter
@Setter
public class ObjectA {
private Integer id;
private String code;
private String name;
}
// comparator:
static class SortByCode implements Comparator<ObjectA> {
public int compare(ObjectA a, ObjectA b) {
String as = a.getCode();
String bs = b.getCode();
return as.compareTo(bs);
}
}
static class SortByName implements Comparator<ObjectA> {
public int compare(ObjectA a, ObjectA b) {
String as = a.getName();
String bs = b.getName();
return as.compareTo(bs);
}
}
// then in service:
List<Integer> idsPreferred = new ArrayList<>();
List<ObjectA> listObj = new ArrayList<>();
idsPreferred = .... add preferred ids;
listObj = .... add objects;
listObj.sort(new SortByCode()).thenComparing(new SortByName());
这样,我按代码和名称排序 - 但我需要按第一个列表添加排序 - 我需要列表中包含 id 的元素排在其他元素之前。
【问题讨论】:
-
您可以使用比较器发布代码吗??
-
你能举个例子吗?
-
我添加了更深入的解释和示例
标签: java sorting comparator