Java Stream - 如果使用 Streams 匹配则替换字符串?

Java Stream - String replace if match using Streams?

我有 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());

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

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());

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

  • 在每次迭代中迭代 only 以将 ENUM3.getData() 替换为 Java
  • 反复调用Mark.search()