是否可以使用另一种类型的流即时生成和收集对象?

时间:2019-05-12 11:27:59

标签: java collections java-stream

我需要从字符串流中创建一组新的objects(synsets),然后将它们收集在HashSet中。我试图在.forEach中执行此操作以避免收集字符串,然后为每个字符串创建objects(synsets),然后再次将它们收集到一组。

try (Stream<String> reader = Files.lines(Path)) {
    reader.filter(s -> !s.startsWith(" "))
            .forEach(set.add(new Synset(s)));
}

2 个答案:

答案 0 :(得分:3)

您可以使用收集为:

try (Stream<String> reader = Files.lines(Paths.get(<file paths>))) {
    Set<Synset> set = reader.filter(s -> !s.startsWith(" "))
            .map(Synset::new)
            .collect(Collectors.toSet());
}

答案 1 :(得分:3)

如果您已经有一个集合,要将对象添加到其中,我会这样做:

try (Stream<String> reader = Files.lines(Paths.get("path-to-file"))) {
    reader.filter(s -> !s.startsWith(" "))
            .map(Synset::new)
            .forEach(set::add);
}