【问题标题】:How to perform an operation on every item in java.util.Set using stream/ifPresent?如何使用流/ifPresent 对 java.util.Set 中的每个项目执行操作?
【发布时间】:2020-04-25 05:07:39
【问题描述】:

我有一个关于流/可选的问题。

我想对查询中获取的一组项目执行删除操作:

providerRepository.findByUserId(user.getId()).ifPresent(providerRepository::delete);

但我的 IDE 说:

Incompatible types: Set<AuthenticationProvider> is not convertible to AuthenticationProvider

如何对集合中的每个项目执行操作?

【问题讨论】:

  • 该系列适合放在哪里?请提供一个最小的、可重现的示例:stackoverflow.com/help/minimal-reproducible-example
  • 你能显示providerRepository::delete方法定义吗?
  • 显示方法findByUserId的定义。特别有趣的是它返回的内容:单个对象、列表、集合?

标签: java collections java-stream optional


【解决方案1】:

在您的 ifPresent 中迭代:

providerRepository.findByUserId(user.getId())
    .ifPresent(set -> set.forEach(providerRepository::delete));

或者,在什么都没有找到的情况下获取一个空集合,然后迭代集合:

providerRepository.findByUserId(user.getId())
    .orElse(Collections.emptySet())
    .forEach(providerRepository::delete);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2021-12-27
    • 2011-04-29
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多