如何在 Jython 中使用 Java 8 个 lambda
How to use Java 8 lambdas in Jython
我正在尝试在 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 中编写 java lambda 表达式,如字符串 -> sting.isEmpty()?
这里是一个在流上使用过滤器的例子,需要一个 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]
我正在尝试在 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 中编写 java lambda 表达式,如字符串 -> sting.isEmpty()?
这里是一个在流上使用过滤器的例子,需要一个 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]