从Lambda表达式stream()。filter()返回字符串

时间:2018-11-07 00:25:37

标签: java lambda

我有这样的东西,我想得到一个字符串

    List<Profile> profile;
    String result = profile
                       .stream()
                       .filter(pro -> pro.getLastName().equals("test"))
                       .flatMap(pro -> pro.getCategory())

getCategory()应该返回一个字符串,但是不确定返回字符串必须使用什么,我尝试了几件事,但是任何有效的方法

有什么主意吗?

谢谢

3 个答案:

答案 0 :(得分:2)

有几种解决方案取决于您要执行的操作。如果您要定位的个人资料是您要定位的个人资料,则可以使用findFirstfindAny获取所需的个人资料,然后从生成的{{ 1}}。

Optional

请注意,Optional<String> result = profile.stream() .filter(pro -> pro.getLastName().equals("test")) .map(Profile::getCategory) .findFirst(); // returns an Optional 返回一个Optional。它以一种可以优雅处理的方式来处理您实际上没有任何符合条件的可能性。

或者,如果您尝试将所有配置文件的类别以“ test”为姓进行连接,则可以使用findFirst来累积字符串。

.collect(Collectors.joining())

答案 1 :(得分:1)

List<Profile> profile;
String result = profile.stream()
                       .filter(pro -> pro.getLastName().equals("test"))
                       .map(pro -> pro.getCategory())
                       .findFirst()
                       .orElse(null);

答案 2 :(得分:1)

您可以在流方法上使用collect(Collectors.joining())方法,该方法将Stream收集为String。 在后台,它将使用StringJoiner类: https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html

Collectors类的Java文档: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#joining--

我认为它将为您提供帮助