void无法在函数映射中转换为Void

时间:2016-01-03 17:39:25

标签: java

我的问题是在removeDuplicates(C),为什么它不接受这种方式?此外,有人可以解释流如何工作?

List<String> countries = new ArrayList<String>() { 
    {
        add("Indiaaaa");
        add("Rommania");
        add("UUUUK");
    }
};
countries.stream()
    .map(c -> removeDuplicates(c))
    .forEach(n -> System.out.print(n + " "));
}

这是函数removeDuplicates:

public static void removeDuplicates(String s) {
    char[] chars = s.toCharArray();
    Set<Character> result = new LinkedHashSet<>();
    for(Character c : chars) {
        result.add(c);
    }
    result.forEach(n -> System.out.print(n));
}

1 个答案:

答案 0 :(得分:0)

removeDuplicates没有返回值。 void的意思是什么。因此,您不能map使用它。

你写的方式,最接近你认为的意思是

countries.stream().forEach(country -> {
   removeDuplicates(country); // prints out the letters without duplicates
                              // doesn't actually modify country,
                              // or return the deduplicated characters
   System.out.print(" ");
});

...虽然您也可以删除.stream(),然后只需撰写countries.forEach(...)