我正在学习如何在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)”,但是如何从文件中获取食物对象?
答案 0 :(得分:6)
您可以map
到Stream<String>
实例的元素Food
(通过您的parseFoodLine
方法),它们使用collect
将它们收集到{ {1}}:
Set
请注意,您的food = stream.map(Food::parseFoodLine).collect(Collectors.toSet());
类应正确覆盖Food
和equals
,以便将hashCode
实例正确存储在Food
中。