首页 > 解决方案 > Java -> Stream.filter() 如何让它返回一个字符串

问题描述

所以我有这个任务,我需要使用 lambda 表达式来进行过滤搜索。简而言之,我有一个用户数据库,我需要为用户进行的每次搜索打印一条消息。我所做的是:

 text=users.stream()
           .filter(c -> c.getName().equals(filter.getName()))
           .findFirst()
           .map( c -> {
               Final String message= c.getSearchOutput(filter.getTitle(); 
               return message;
           })
           .toString();

问题是我的文字类似于

“可选:[在此处插入最终字符串消息]”

我需要公正

在此处插入最终字符串消息....

如何改进这个 lambda 表达式?我需要这样做,因为我必须将文本解析为 JSON 对象,而我显然无法在 lambda 表达式的主体中执行此操作。

标签: javalambdaexpression

解决方案


findFirst返回一个Optional所以你可以尝试使用:

  1. Optional.orElse / orElseGet / orElseThrow方法:
text = users.stream()
    .filter(c -> c.getName().equals(filter.getName()))
    .findFirst().map( c -> {
        return c.getSearchOutput(filter.getTitle(); 
    }).orElse("");
  1. Optional.get方法:
text = users.stream()
    .filter(c -> c.getName().equals(filter.getName()))
    .findFirst().map( c -> {
        return c.getSearchOutput(filter.getTitle(); 
    }).get();

Optional.get如果您的可选选项为空,则会抛出NoSuchElementException,因此您可能想要使用第一个选项。


推荐阅读