当前位置: 首页 > 知识库问答 >
问题:

如果存在,则使用Java流根据条件分配值,否则

徐瑞
2023-03-14

如果存在可选项,我想将值设置为字符串,否则根据条件从列表中获取它。我尝试了很多方法,但都无法获得它。我是Streams的新手,所以需要帮助。

基本上我的情况是传统的-

        String rel = ""
        if(release.isPresent()){
            rel = release.get();
        }
        else{
            for(Release r: project.getReleases()){
                if(r.isActive() == true){
                    rel = r.getName();
                }
            }
        }

这是我写的,但它不起作用。我在orElse部分出错了-

rel = release.ifPresent(r-> release.get())
                .orElse(
                    project.getReleases()
                    .stream()
                    .filter( r -> r.isActive() == true)
                    .findFirst()
                    .map(r->r.getName()));

你能建议一下正确的方法吗?提前感谢您的帮助。

共有3个答案

锺离正祥
2023-03-14

你能做到的

release.orElse(project.getReleases()
               .stream().filter(Release::isActive).findFirst().map(Release::getName).orElse(""));
刁茂才
2023-03-14

对此,您应该使用#orElseGet可选

因为orElseGet接受供应商,只有当您的可选项为空时才会调用供应商。因此,您将不会有创建流等的开销。

String rel = release.orElseGet(() -> project.getReleases()
                                            .stream()
                                            .filter(Release::isActive)
                                            .map(Release::getName)
                                            .findFirst()
                                            .orElse(""));
仲孙俊贤
2023-03-14

如果您使用java-9或更新版本,这就是您想要的(我建议您标记使用的版本):

String rel = release
        .or(() -> project.getReleases().stream()
                                       .filter(Release::isActive)
                                       .map(Release::getName)
                                       .findFirst())
        .orElse("");

基本上可选#或返回原始可选的现值或提供供应商

利用流#findFirst返回可选的优势,因此此类调用与方法需要兼容。最后,如果在以前的尝试中没有可用值,则调用orElse(“”)作为最后一个可能的值。

 类似资料:
  • 我想运行一个调用Java方法并从另一个规则传递事实(或者更确切地说,它的逻辑值)的规则,尽管我不知道java方法是否对这个问题很重要。描述起来并不容易,所以我将尝试基于一个示例来展示它: 这里的问题是,第一条规则并不总是触发,因此不总是定义某些条件,也不计算第二条规则。 我的第二次尝试是创建这样两个独立的规则: 这也不能像预期的那样工作,因为它首先计算someconditionfalse规则,甚至

  • 问题内容: 我试图做一个有条件的正则表达式,我知道堆栈溢出还有其他帖子,但是对这个问题太具体了。 如何创建仅在特定条件下才能匹配的正则表达式? 一个例子 例如,如果我们有一个字符串列表( 在java中 ): 并且我们只想匹配字符串末尾与开头相同数量的 在这个例子中我们想要什么 在此示例中,我们需要一个正则表达式来检查结尾处是否有与开始时相同数量的正则表达式。 条件部分 :如果开头有,则检查结尾是否

  • 问题内容: 使用Sql Server2012。我有一个存储过程,它的一部分检查用户名是否在表中。如果是,则返回1,否则返回2。这是我的代码: 但是,我一直收到以下错误: ‘1’附近的语法不正确。 使用IF EXIST甚至可以做到吗? 问候 问题答案: 如果您想这样做,那么这就是您要遵循的语法。 您不一定严格要求这些语句,但是最好是从一开始就养成这种习惯。

  • 问题内容: 如果我想实现一些可以通过两种方式实现的条件代码。那么哪种方式更好的是条件运算符?:或if..then..else ?? 问题答案: 这取决于。通常,您希望活动的主要流程在代码的结构中表示。如果算法的关键是变量已初始化,那么最好的解决方案是使用条件运算符: 如果决策是了解正在发生的事情的关键问题,那么您将首选。实际上,这意味着当两者都可行时,您将使用。关键是“合理” —如果您发现在子表达

  • 这是我的代码的简短版本。 两个条件都调用。有没有办法避免其他情况?我可以做,但我正在寻找一个非阻塞的解决方案。

  • 问题内容: 我有一些看起来像这样的代码。我必须保留表中的一个自动递增字段(在其他表中使用)。我想简化和优化此代码。 编辑:主键ID是自动递增的字段。我永远都不想改变。但是,当另一个字段重复时,这就是我要更新该记录的时间。 问题答案: 如何替换成: 假设col1是您的主键,如果已经存在一个值为’foo’的行,它将更新其他两列。否则,它将插入新行。