[英]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.