类型不匹配:无法从Set <object>转换为Set <long>

时间:2016-12-09 15:42:04

标签: java eclipse

我有这段代码

Set<Long> families = humans
            .stream()
            .flatMap(x -> x.data.stream().map(l -> l.person.id))
            .collect(Collectors.toSet());

humans = List<Human>

public static class Human
{
    public List<Data> data = Lists.newArrayList();
}    

public static class Data
{
    public Person person;
}

public class Person
{
   public long id;
   public String name; 
}

由于此错误,此代码无效:

  

类型不匹配:无法从Set转换为Set   为什么我有这个错误?我做错了吗?

1 个答案:

答案 0 :(得分:1)

我不知道为什么会收到错误,但作为解决方法:

Set<Long> families = humans
            .stream()
            .flatMap(x -> x.data.stream().map(l -> l.person.id)).map(f->(Long) f)
            .collect(Collectors.toSet());

或者(感谢@Tunaki):

Set<Long> families = humans
                .stream()
                .<Long>flatMap(x -> x.data.stream().map(l -> l.person.id))
                .collect(Collectors.toSet());

或者我可以使用循环,比在这种情况下使用流更快。