将方法应用于流

Applying method to stream

提问人:coconut 提问时间:10/8/2018 最后编辑:ernest_kcoconut 更新时间:10/8/2018 访问量:105

问:

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

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

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

但是我如何通过这种方法来放置每一行呢?

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");
    }
}

我知道我应该做“stream.forEach(food::add)”,但是如何从我的文件中获取食物对象?

java-8 java -流

评论

3赞 Andy Turner 10/8/2018
题外话:您可能希望使用而不是作为拆分模式。\\||
0赞 coconut 10/8/2018
谢谢@AndyTurner!

答:

6赞 Eran 10/8/2018 #1

您可以将 to 实例的元素(通过您的方法)和它们用于将它们收集到一个 :mapStream<String>FoodparseFoodLinecollectSet

food = stream.map(Food::parseFoodLine).collect(Collectors.toSet());

请注意,您的类应正确覆盖并正确,以便将实例正确存储在 .FoodequalshashCodeFoodHashSet

评论

4赞 Ousmane D. 10/8/2018
更准确地说是可变的......即 但甚至可能无关紧要,具体取决于集合的用例,一旦它返回到调用方法。HashSet.collect(Collectors.toCollection(HashSet::new));food