Java,使用parallelStream()。anyMatch()和contains()比较字符串,一个版本有效,另一个版本不起作用

问题描述 投票:0回答:1

我打算重做在这里找到的代码:https://stackoverflow.com/a/8995988但这被证明是不成功的。我从这里得到一个主意:https://www.logicbig.com/how-to/java/lambda-list-contains-a-substring.html

而且我的想法行得通,但我怀疑这是错误的代码,我想知道为什么我没有进行StackOverflow返工的情况无法按预期进行。

我将在1个块中同时显示代码的两位。只需切换注释和不注释哪个“ if”行,即可在工作版本和不工作版本之间切换。

import java.util.Arrays;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<String> result0 = Arrays.asList("/Videos/Templates/file.mp4", "/Videos/Templates/file2.mp4", "/Videos/Templates/file3.mp4");
        List<String> result2 = Arrays.asList("/Videos/Templates/file.mp4.sha256");

        for (int i = 0; i < result0.size(); i++) {

            List<String> finalResult = result0;
            int finalI = i;
            // if (result2.parallelStream().anyMatch(x -> x.contains(finalResult.get(finalI)))) {
            if (result2.parallelStream().anyMatch(x -> finalResult.get(finalI).contains(x))){
                System.out.println("sha matches files: " + result0.get(i));
            }
        }
    }
}

如果证明这个问题更好地用作对https://stackoverflow.com/a/8995988的注释,可以更好地解释代码,那么我很乐意对此进行修改。

java stream
1个回答
0
投票

因为contains不是交换运算符。例如,“闪电”包含“灯光”,但“灯光”不包含“闪电”。在您的情况下,"/Videos/Templates/file.mp4.sha256"包含"/Videos/Templates/file.mp4",但"/Videos/Templates/file.mp4"不包含"/Videos/Templates/file.mp4.sha256"

© www.soinside.com 2019 - 2024. All rights reserved.