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