iCo*_*der 1 java comparator java-stream
问题:我正在尝试检查是否可以使用2个或更多条件对列表(数据类型为Object的ArrayList)进行排序.请注意我知道使用Comparator with thenComparing功能.我希望检查是否有一种方法可以使用2个或更多标准进行排序,而无需使用自定义数据类型,我可以轻松使用比较器功能.对于1个标准排序,以下代码有效.
在这种情况下,如果我执行以下操作,IntelliJ IDE会立即给出错误 - '无法解析方法'get(int)'for o.get(3)
.sorted(Comparator.comparing(o -> o.get(3).toString()).thenComparing(...)
Run Code Online (Sandbox Code Playgroud)
我在这个论坛示例中也提到了很多线程 - Link1 Link2
代码(适用于单一标准)
List<List<Object>> listOutput = new ArrayList<>();
.........
.........
listOutput = listOutput
.stream()
.sorted(Comparator.comparing(o -> o.get(3).toString()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
添加(对象细节)
(注意)
String dataType - exchange,broker,segment,coCode
LocalDate dataType - tradeDate
LocalTime dataType - tradeTime
double dataType - sellPrice,buyPrice
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
Run Code Online (Sandbox Code Playgroud)
似乎编译器无法推断出正确的类型(我尝试过javac 8和9具有相同的效果).我能使它工作的唯一方法是直接通过强制转换来指定类型:
list.stream()
.sorted(
Comparator.comparing((List<Object> o) -> o.get(3).toString())
.thenComparing((List<Object> x) -> x.get(3).toString()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |