【问题标题】:Java -> Stream.filter() how to make it return a String [duplicate]Java - > Stream.filter() 如何让它返回一个字符串 [重复]
【发布时间】:2020-11-21 14:31:48
【问题描述】:

所以我有这个任务,我需要使用 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 表达式的主体中执行此操作。

【问题讨论】:

    标签: java lambda expression


    【解决方案1】:

    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,因此您可能希望使用第一个选项。

    【讨论】:

    • 谢谢,这解决了我所有的问题。我使用了第一个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2015-03-08
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2018-02-24
    相关资源
    最近更新 更多