使用java流和收集通用类型

时间:2016-10-10 16:42:01

标签: java lambda

我正在将字符串列表转换为特定类型的列表。由于字符串是反序列化的对象,因此可以在gson的帮助下将字符串列表转换为其他类型。我正在使用lambda函数进行转换。

我目前的代码如下:

List<String> myObject = myMethod.get(...);
Type typeObject= new TypeToken<T>(){}.getType();
List<T> myTransformedObject = myObject.stream()
                                .map(x-> gson.fromJson(x, typeObject))
                                .collect(Collectors.toList())); 

我收到错误消息 - “没有类型变量的实例存在,因此Object确认为T.

我错过了什么?

2 个答案:

答案 0 :(得分:1)

如果您想使代码具有通用性,则应使用下一个bounded type parameter的方法:

public <T> List<T> transform(Class<T> type) {
    return myObject.stream()
        .map(x-> gson.fromJson(x, type))
        .collect(Collectors.toList());
}

如上所示,您必须明确提供目标类,否则无法正常工作。

答案 1 :(得分:0)

实际上如果你将类对象传递给 gson.from(x,YourClass.class),它的工作正常:

@Test
public void testStack() throws Exception {
    List<String> myObject = asList("{name: John}");
    Type typeObject= new TypeToken<Person>(){}.getType();
    List<Person> myTransformedObject = myObject.stream()
            .map(x-> gson.fromJson(x, Person.class))
            .collect(Collectors.toList());
    myObject.forEach(System.out::println);
}

class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

}