【问题标题】:Java Stream - String replace if match using Streams?Java Stream - 如果使用Streams匹配,则字符串替换?
【发布时间】:2020-05-03 21:43:03
【问题描述】:

我有 if 条件,我正在检查字符串是否相等,如果它们匹配,我将它们存储在 Set 中。然后我循环通过 Set 检查是否存在 ENUM3 值,如果是,我将那个特定的字符串替换为值 String Java 。我正在使用 Iterator 循环并检查是否相等。我正在寻找使用流的相同功能,其中

1. I can loop through Set
2. Check for String equality
3. If ENUM3 found then replace with Java
4. Save all the matched String

这是我的代码

{
    Set<String> only = new HashSet<String>();
    Iterator<Mark> itr = Marks.iterator();
    while (itr.hasNext()) {
        Mark find = itr.next();

        if (ENUM1.getData().equals(find.search())||ENUM3.getData().equals(find.search())) {
            only.add(find.search());
            only = only.stream()
                    .map(macro -> macro.equals(ENUM3.getData()) ? "Java" : macro).collect(Collectors.toSet());
        }
    }
}

这是我尝试使用 Stream 的方法

only = only.stream()
            .map(macro -> macro.equals(ENUM3.getData()) ? "Java" : macro)
            .collect(Collectors.toSet());

【问题讨论】:

  • 你的逻辑有点难以理解。你为什么在每次迭代中循环通过only?为什么不在while 循环的末尾这样做呢?
  • 对不起,我没有得到你的问题。基本上我要做的就是通过迭代 Set 检查字符串是否相等,如果它们匹配则保存值,如果值匹配 ENUM3,只需将其替换为 String java。使用上面的流代码字符串替换是可能的,因为我正在寻找只使用流来循环 Set 并检查字符串是否相等,简而言之,用 Streams 替换 Iterator 逻辑。让我知道这是否有帮助

标签: java java-8 iterator java-stream refactoring


【解决方案1】:

这应该执行您的整个操作:

Set<String> only = Marks.stream()
    .map(Mark::search)
    .filter(mark -> ENUM1.getData().equals(mark) 
                    || ENUM2.getData().equals(mark) 
                    || ENUM3.getData().equals(mark))
    .map(macro -> macro.equals(ENUM3.getData()) ? "Java" : macro)
    .collect(Collectors.toSet());

你似乎没有必要做这 2 个(在上面的管道中都避免了这两个)

  • 在每次迭代中遍历only 以将ENUM3.getData() 替换为Java
  • 反复拨打Mark.search()

【讨论】:

  • 进一步的ENUM1.getData().equals(mark) || ENUM2.getData().equals(mark) || ENUM3.getData().equals(mark) 可以替换为Set.contains,其中Set 将包括Enum1,2,3.getData()
  • 第 2 行出现找不到符号 Mark 错误
  • @user12707940 Mark 在您的原始代码中使用,因此您应该对其进行导入。
  • 是的,Mark 是类型。但错误是找不到符号变量Mark,不知道为什么。由于search 是一种方法,我需要添加类似 search() 的括号吗?
  • Mark::search 替换为mark -&gt; mark.search() 会发生什么?
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多