【问题标题】:How to use Java 8 lambdas in Jython如何在 Jython 中使用 Java 8 lambda
【发布时间】:2017-10-13 16:59:48
【问题描述】:

我正在尝试在 jython 中试验 java 8 流和集合,看看它们在纯 jython 中实现时是否有效。在我看来它可以(对此也表示赞赏)

我从一些例子开始,计数

from java.util.function import Function
from java.util import ArrayList
from java.util.stream import Collectors

letters = ArrayList(['a','b','a','c']);

cnt=letters.stream().collect(Collectors.groupingBy(Function.identity(),
                                            Collectors.counting()))

将cnt打印为字典 {u'a': 2L, u'b': 1L, u'c': 1L}

到目前为止一切顺利。接下来,我找到了一个在 java 中对流使用过滤器的示例

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//get count of empty string
int count = strings.stream().filter(string -> string.isEmpty()).count();

这在 jython 中如何翻译。具体来说,如何在 jython 中编写类似 string -> sting.isEmpty() 的 java lambda 表达式?

【问题讨论】:

  • 创建一个Predicate 对象并将其传递给Stream.filter。箭头语法只是语法糖。在幕后,您定义了一个 Predicate 对象,该对象有一个参数并返回一个 boolean 结果。 docs.oracle.com/javase/8/docs/api/java/util/stream/…
  • @iceArdor 谢谢,用它来回答问题

标签: jython jython-2.7


【解决方案1】:

这是一个在流上使用过滤器的示例,需要 Predicate (java.util.function.Predicate) 类型的对象

对于java代码:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//get count of empty string
int count = strings.stream().filter(string -> string.isEmpty()).count();

eqvivalet jython 将首先对 Predicate 进行子类化并实现测试方法。

from java.util.function import Predicate
from java.util.stream import Collectors

class pred(Predicate):
   def __init__(self,fn):
       self.test=fn

@pred
def mytest(s):
    from java.lang import String
    return not String(s).isEmpty() #or just use len(s.strip())==0

strings = ArrayList(["abc", "", "bc", "efg", "abcd","", "jkl"])
count = strings.stream().filter(mytest).count()
lst=strings.stream().filter(mytest).collect(Collectors.toList())
print(count)
print(lst)

然后打印

计数:

5L

lst:

[abc, bc, efg, abcd, jkl]

【讨论】:

    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多