无法将表单<File>转换为List <Path>

not*_*ber 1 java

显然,无法从List <File>转换为List <Path>.我试图这样做,因为JFileChooser返回一个File对象数组.现在,我只是好奇Java中是否有比使用循环更优雅(功能)的方法.

import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {

  public static void main(String[] args) {
    File[] array = new File[] { new File("a.txt"), new File("b.txt"),
      new File("c.txt"), new File("d.txt") };

    // Type mismatch: cannot convert from List<File> to List<Path>
    // List<Path> list = Arrays.asList(array);

    // This will work but is not particularly pretty
    List<Path> list = new ArrayList<Path>();
    for (int i = 0; i < array.length; i++) {
      list.add(array[i].toPath());
    }

    System.out.println(list);
  }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 7

您已经可以使用更好的循环了

for(File f: array) {
  list.add(f.toPath();
}
Run Code Online (Sandbox Code Playgroud)

然后,如果您使用的是Java 8,则可以使用以下内容来使用新流:

final List<Path> list = Arrays.stream(array).map(File::toPath)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 嗯不,数组上没有`.stream()`方法; 你必须`Arrays.stream(array)`.你必须在最后``收集(Collectors.toList())`(为你修复) (2认同)