具有双重比较器条件的对象的排序列表-通过动态列

时间:2019-01-31 15:53:20

标签: java sorting collections

我有一个对象集合-每个对象都包含一个地图

我需要根据一次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;
    }

0 个答案:

没有答案