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

如何匹配流元素但如果不存在则返回false?

黄跃
2023-03-14

示例代码

public boolean validate(Stream<Whatever> stream) {
  // Problem: returns **true** if stream empty.
  // How can **false** be returned if stream is empty?
  return stream.allMatch(Whatever::someCheck);
}

共有1个答案

何睿范
2023-03-14

你可以用

public boolean validate(Stream<Whatever> stream) {
    return stream.map(Whatever::someCheck).reduce(Boolean::logicalAnd).orElse(false);
}

其中表达了意图。我们将每个元素映射到一个boolean值,该值表示元素是否匹配,并使用逻辑and操作将所有元素约简,如果所有元素都是true,则生成true。如果没有元素,reduce将返回一个空的optional,我们使用orelse(false)将其映射到false

唯一的缺点是这是非短路的,即不会立即停止在第一个非匹配元件。

public boolean validate(Stream<Whatever> stream) {
    boolean parallel = stream.isParallel();
    Spliterator<Whatever> sp = stream.spliterator();
    if(sp.getExactSizeIfKnown() == 0) return false;
    Stream.Builder<Whatever> b = Stream.builder();
    if(!sp.tryAdvance(b)) return false;
    return Stream.concat(b.build(), StreamSupport.stream(sp, parallel))
        .allMatch(Whatever::someCheck);
}
 类似资料:
  • 我当前正在过滤一个流,但是如果过滤器没有返回任何匹配项,我想返回一个默认值。这是在附加流的链中,所以我使用它来避免在一个步骤没有任何结果时链停止。 目前,我正在通过将筛选结果收集到一个列表中来伪造它,如果列表为空,请创建新的默认列表并将其作为流返回。如果列表不为空,则将结果转换回流以将其传递回。 有什么更流的方式来实现这一点,而不需要去列表和返回流?

  • 问题内容: 我遇到了由于某种原因无法解决的问题。我正在尝试编写一个连接两个表的查询,其中在一个表中可能找不到匹配项。如: 如果中没有匹配项,则不返回任何内容。但是,如果没有匹配项,我仍然需要为该列返回NULL,并且仍从返回值。 我已经改变了所有我能想到的,但无济于事。 可以包含多个其他值,因此无法进行某种交易。 因此,如果没有匹配,我仍然需要它返回: 有什么建议? 问题答案: 将for的条件移出子

  • 问题内容: 我正在使用以下代码检查网页上的元素 我需要检查程序是否在特定区域中显示了如下结果 如果存在此功能,则该功能将快速完成,但是如果不存在以上功能,则它将运行很长时间。 有人可以帮我解决这个问题,以便快速进行检查吗? 问题答案: 在这里,您缺少了某些东西,这就是为什么它在等待的原因如果没有元素。findElement将等待元素隐式指定的时间。因此需要在该方法中将该时间设置为零。 这里有4件重

  • 问题内容: 我在node.js中编写一个函数来查询PostgreSQL表。 如果该行存在,我想从该行返回id列。 如果不存在,我想将其插入并返回ID()。 我一直在尝试和语句的变体,但似乎无法使其正常工作。 问题答案: 我建议在数据库端进行检查,然后将ID返回给nodejs。 例子: 而不是在Node.js端(在此示例中,我使用的是node-postgres):

  • 问题内容: 在一个SQL语句中,我尝试插入一行,如果由于约束而失败,则返回现有行。 我有: 该列具有唯一约束。我尝试在末尾追加,但这仍然不返回现有行。 为什么是这样?我以为我的最后一条语句将被执行并返回。有任何想法吗? 注意:由于某些复杂的竞争条件,我无法使用Postgres函数或多个SQL语句。 问题答案: WITH d(t, e) AS ( VALUES (‘abcdefg’, ‘2014-0

  • 问题内容: 我有3个表:audioFormats,videoFormats和fileInfo。我有一个事务,当我插入到fileInfo表中时,该插入包含来自audioFormats和videoFormats的FK。如果这些表中还没有音频或视频格式,则会在后面的表中进行插入,然后将生成的(或现有的)ID值插入到fileInfo中。 仅当该值不存在时如何有效地插入该值,而仅使用SQL(可能是一个事务)