应用方法流

coc*_*nut 3 java java-8 java-stream

我正在学习如何在Java中使用流.我有一个文件,其中包含一些我想在某些数据结构中加载的信息,例如Set.

我写了一个函数来解析每一行.

private Food parseFoodLine(String line){
    String[] items = line.split("|");
    Food food = #Parsing done here. 
    return food;
}
Run Code Online (Sandbox Code Playgroud)

但是我如何通过该方法放置每一行?

private Set<Food> loadFood(){
    Set<Food> food = new HashSet<>();
    try (Stream<String> stream = Files.lines(Paths.get("myFile"))) {
        stream.forEach(parseFoodLine());
    } catch (IOException e) {
        System.err.println("Error parsing file");
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白我应该做"stream.forEach(food :: add)"但是如何从我的文件中获取食物对象?

Era*_*ran 6

你可以map你的元素Stream<String>,以Food实例(通过你的parseFoodLine这些方法),并使用collect以将其收集到Set:

food = stream.map(Food::parseFoodLine).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

请注意,您的Food类应该覆盖equalshashCode正确,以便将Food实例正确存储在HashSet.

  • 更准确地说是一个可变的`HashSet` ...即`.collect(Collectors.toCollection(HashSet :: new));`但是一旦它返回到调用,取决于`food`集合的用例可能不重要方法. (4认同)