问题:我试图检查是否可以使用2个或更多条件对列表(数据类型为Object的ArrayList)进行排序。请注意,我知道将Comparator与thenComparing功能一起使用。我希望检查是否有一种方法可以对2个或更多条件进行排序,而不必使用自定义数据类型,从而可以轻松使用比较器功能。对于1个条件排序,以下代码适用。

在这种情况下,如果我执行以下操作,则IntelliJ IDE会立即显示错误消息-'无法解析o.get(3)的方法'get(int)'

.sorted(Comparator.comparing(o -> o.get(3).toString()).thenComparing(...)


我在此论坛示例中也提到了许多主题-Link1 Link2

代码(这对于单个条件非常有效)

List<List<Object>> listOutput = new ArrayList<>();
.........
.........
listOutput = listOutput
                    .stream()
                    .sorted(Comparator.comparing(o -> o.get(3).toString()))
                    .collect(Collectors.toList());


已添加(对象详细信息)

(注意)

字符串数据类型-交易所,经纪人,细分,共同代码

LocalDate数据类型-tradeDate

LocalTime数据类型-tradeTime

double dataType-卖方价格,买方价格

List<Object> lineOutput = new ArrayList<>();
lineOutput.add(exchange);
lineOutput.add(broker);
lineOutput.add(segment);
lineOutput.add(tradeDate);  // Entry Date
lineOutput.add(tradeTime);   // Entry Time
lineOutput.add(coCode);
lineOutput.add(sellPrice - buyPrice);   // Profit / Loss
listOutput.add(lineOutput); // Add line to Output

最佳答案

看来编译器无法推断出正确的类型(我试过javac 8和9具有相同的效果)。我可以使之起作用的唯一方法是直接通过强制转换指定类型:

list.stream()
    .sorted(
       Comparator.comparing((List<Object> o) -> o.get(3).toString())
                 .thenComparing((List<Object> x) ->  x.get(3).toString()));

10-05 21:13
查看更多