我有一个对象集合-每个对象都包含一个地图
我需要根据一次Map.Entry动态地对该集合进行排序-特定地图条目的键将作为输入字段发送给我。
我尝试使用thenComparing,但是我遇到了错误,
当我添加第二个编译器thenComparing
我收到错误消息“无法解析方法'getColumns()'”
row.getColumns() return Map<String,String>
在这里,我尝试过的代码将不胜感激。
public ArrayList<Row> sortData(Collection<Row> data, String keyColumn){
return data.stream().sorted(
Comparator.comparingInt(row -> row.getColumns().get(keyColumn).length())
.thenComparing(Comparator.comparing(row -> row.getColumns().get(keyColumn)))
).sorted().collect(Collectors.toCollection(ArrayList::new));
}
我将使用一个比较器-但是当排序仅在comparing
上时
当只有数字时将排序:1,2345在2和19之前。
我的问题与重复项所标记的不一样,因为要对其进行排序的列是动态的-我不能使用基于函数的签名,例如Object :: toString。
由于被标记为重复项,因此无法在此处附加解决方案来提出我自己的问题
public static ArrayList<Row> sortData(Collection<Row> data, String keyColumn){
Comparator<Row> comparatorInt = Comparator.comparingInt(row -> row.getColumns().get(keyColumn).length());
Comparator<Row> comparatorStrings = Comparator.comparing(row -> row.getColumns().get(keyColumn));
ArrayList<Row> dataAsList = new ArrayList(data);
Collections.sort(dataAsList, comparatorInt.thenComparing(comparatorStrings));
return dataAsList;
}