簡體   English   中英

Java 中的動態流

[英]Dynamic Streams in Java

我一直在玩動態 LINQ,我想知道是否可以在 Java 中做類似的事情。 例如,如果我采用此工作代碼:

Stream<PoliceShooting> averageAge = peopleShot.stream().filter(t->t.getAge() != null);

有沒有辦法讓它像我可以使用動態 LINQ 那樣動態化

String dynamicGetter = "t.getAge() != null"
Stream<PoliceShooting> averageAge = peopleShot.stream().filter(t->dynamicGetter);

依靠 Nashorn,如如何將字符串轉換為 lambda 表達式中所建議的那樣? ,您可以定義一個方法來從 JavaScript 代碼構建Predicate

public Predicate<Object> convertJSToPredicate(String js) throws ScriptException {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    return (Predicate<Object>) engine.eval("new java.util.function.Predicate(function(t) " + js + ")");
}

然后將其用作:

String dynamicGetter = "t.getAge() != null";
Stream<PoliceShooting> averageAge = peopleShot.stream()
        .filter(convertJSToPredicate(dynamicGetter));

當然dynamicGetter必須是 JavaScript 而不是 Java 代碼,並且可以通過變量t訪問傳入的對象。

請注意, Nashorn 在 Java 11 中已棄用 我認為會出現替代實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM