[英]Save a string from a list using streams
我正在尝试 stream 字符串列表。 我知道我们可以这样做:
list.stream().filter(i -> !Stringutils.isempty(service.someMethod(i))).map(i -> service.someMethod(i)).findfirst().get();
问题是我需要调用service.someMethod
两次。
这里有什么建议可以避免service.someMethod
在过滤器中调用它两次,而另一个用于映射?
您应该反转 map 并过滤如下:
list.stream()
.map(service::someMethod)
.filter(s -> !Stringutils.isEmpty(s)) // or if it exists, StringUtils::isNotEmpty
.findFirst()
.get()
我喜欢使用 java8 流,希望你也喜欢。
似乎你想用someMethod
列出 map 然后过滤非空值,所以就这样做。 您唯一应该做的就是更改 map 和过滤器的顺序,更改顺序后, someMethod 只会被调用一次。 因为我们对它们进行一次 map 并过滤映射值。
新代码将是这样的:
String answer = list
.stream()
.map(a -> service.someMethod(a))
.filter(a -> !a.isEmpty())
.findFirst()
.get();
更好的是,您可以用方法参考替换 lambda
.map(service::someMethod)
// same as .map(a -> service.someMethod(a))
(对不起我的英语不好)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.