![](/img/trans.png)
[英]sorting and partitioning data based on dynamic serial ordered input stream in java
[英]Dynamic sorting with Java 8 stream?
長話短說,我使用JDBI DAO來訪問數據。 查詢中包含動態訂單很難。 因此,我計划在獲取查詢結果后使用Java 8流作為后處理步驟執行此操作。
問題是比較器的工作方式是必須靜態聲明對象的方法。
shepherds = shepherds.stream()
.sorted(Comparator.comparing(Shepherd::getId).reversed())
.collect(Collectors.toList());
我怎樣才能動態地使用這樣的變量
orderBy = id
orderDirection = ASC
這樣我可以對這個方法調用一下嗎?
例如
if(orderDirection.equals("ASC"))
shepherds.stream().sorted(Comparator.comparing(orderBy));
else
shepherds.stream().sorted(Comparator.comparing(orderBy).reversed());
最簡單的方法是建立一個Map
(除非你真的不能在數據庫方面做到這一點,這應該是你的主要關注點), Key
看起來像:
class Key {
String field;
Direction direction; // enum
// getters/setters/hashcode/equals
}
只需預先創建此Map
:
Map<Key, Comparator<Shepherd>> map = new HashMap<>();
map.put(new Key("id", Direction.ASC), Comparator.comparing(Shepard::getId))
map.put(new Key("id", Direction.DESC), Comparator.comparing(Shepard::getId).reversed())
另一種方法,我認為這將有可能通過真正動態創建這個LambdaMetafactory
,但它是相當復雜的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.