繁体   English   中英

使用流保存列表中的字符串

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM