嵌套for循环处理文件 - java 8

时间:2018-01-29 13:05:29

标签: java java-8

我想在java 8中为内部编写:

for (String file : files) {
                for (String line : lines) {
                    if (file.contains(line)) {
                       //do something
                    }
                }
            }

我不想为每个人写内容,如:

files.stream().forEach(file -> { 
      lines.stream().forEach(line-> {
        //do something
      })
})

有什么像

(file, line) -> { //do something}

在对内,我将得到所有可能的排列

2 个答案:

答案 0 :(得分:7)

你可能会这样,但它与你现有的没有太大的不同

 files.stream()
      .flatMap(file -> lines.stream().map(line -> new Pair(file, line)))
      .map(pair -> do something with pair)

答案 1 :(得分:1)

或者您可以简单地定义一个类,该类将包含一个列表,以便在采用String的方法中进行研究。我在这里使用Dictionary类来查找另一个列表中定义的每个“单词”。

public class Dictionary{

    private List<String> list;

    public Dictionary(List<String> list){
        this.list = list;
    }

    public void printMatch(String word){
        list.stream().filter(word::contains).forEach(System.out::println);
    }
}

然后,对于每个file,只需调用方法。

public static void main(String[] args) {
    Dictionary d = new Dictionary(Arrays.asList("abc", "def", "fgh"));
    Stream.of("def", "ijk").forEach(d::printMatch);
}

该示例不是为了匹配实际需求,而是为了显示一个简单的解决方案,不直接使用内部循环(只需将它们隐藏在方法中;)。)。