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

Java8流可以对集合中的项进行操作,然后将其移除吗?

司空鸣
2023-03-14
set.stream().filter(item -> item.qualify())
    .map(item -> (Qualifier)item).forEach(item -> item.operate());
set.removeIf(item -> item.qualify());

如果是在Javadocs中,我可能会忽略它。

熟悉API的人会看到类似的东西吗?

共有1个答案

井嘉胜
2023-03-14

你可以这样做:

set.removeIf(item -> {
    if (!item.qualify())
        return false;
    item.operate();
    return true;
});

如果item.operate()始终返回true,那么您可以非常简洁地执行此操作。

set.removeIf(item -> item.qualify() && item.operate());

然而,我不喜欢这些方法,因为现在还不清楚是怎么回事。就我个人而言,我将继续使用for循环iterator

for (Iterator<Item> i = set.iterator(); i.hasNext();) {
    Item item = i.next();
    if (item.qualify()) {
        item.operate();
        i.remove();
    }
}
 类似资料:
  • 问题内容: 像几乎每个人一样,我仍在学习新的Java 8 Streams API的复杂性(并喜欢它们)。我对流的使用有疑问。我将提供一个简化的示例。 Java Streams允许我们采用,并在其上使用方法来接收其所有元素的流。在这,有许多有用的方法,比如,和,这让我们对内容的使用拉姆达操作。 我有看起来像这样的代码(简化): 这个想法是获取集合中与某个限定符匹配的所有项目的映射,然后对它们进行操作

  • srem key member 成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误

  • 问题内容: 我有一个看起来像下面的文档: data.txt 我使用正则表达式对其进行了处理,并返回了如下的新处理文档: 这将返回已处理的MyClass的列表。可以并行运行,一切正常。 问题是我现在有这个: data2.txt 因此,我需要以某种方式加入正在从流中读取的行,直到出现新的匹配项为止。(有点像缓冲区吗?) 我尝试收集字符串,然后收集MyClass(),但没有成功,因为我实际上无法拆分流。

  •  在 TJS2 中,虽然字节串类似 Octet 类的对象,但实际上 Octet 类并不存在。 ( 但是如果对字节串进行 instanceof 运算则会返回 "Octet" )。  但是,如果使用对象的概念来讲,对于字节串有一系列可以使用的方法和属性。  字节串相关功能的实现尚未完成。 length  length 方法将返回字节串的长度,请注意这个功能不是方法而是一个属性。但是,这个属性无法被赋值

  •  在 TJS2 中,字符串被当作虚拟的 String 类的对象这样的东西,但是 String 类并不存在,实际上并没有 String 类的对象 ( 但是 对字符串使用 instanceof 运算符会返回 "String" )。  但是,可以把字符串当作对象,使用使用各种方法和属性。 length  length 属性返回字符串的长度。请注意,这个不是方法,而是属性。但是,不能往这个属性中写入数值。

  • smove srckey dstkey member 从srckey对应set中移除member并添加到dstkey对应set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set类型返回错误