我创建了一个迭代String列表的方法,并使用ObjectMapper readValue方法将其转换为POJO列表。
public static <T> List<T> mapPayloadListToPOJOList(List<String> payloadList, Class<T> pojo) throws IOException {
ObjectMapper mapper = new ObjectMapper();
List<T> pojoList = new ArrayList<>();
for (String payload : payloadList) {
T mapped = mapper.readValue(payload, pojo);
pojoList.add(mapped);
}
return pojoList;
}
我试图使用地图,但它不允许应用Class<T>
参数。
答案 0 :(得分:2)
认为应该是map
而不是forEach
..
payloadList.stream()
.map(s -> mapper.readValue(s, pojo))
.collect(Collectors.toList())
区别在于,map
使用提供的lambda(List
)将每个元素从原始s -> mapper.readValue(s, pojo)
映射到新元素,而forEach
执行side-effect对于原始List
中的每个元素,不返回任何内容。
答案 1 :(得分:2)
可以通过删除for循环并将其替换为流来轻松完成,但lambda表达式在处理已检查的异常时会遇到一些问题。
您可以使用单独的转换方法解决它并在该方法中处理异常(通过记录它或将其重新抛出为未经检查的异常)。
public static <T> List<T> mapPayloadListToPOJOList(List<String> payloadList, Class<T> pojo) {
return payloadList.stream()
.map(string -> convert(string, pojo))
.collect(Collectors.toList());
}
public static <T> T convert(String string, Class<T> pojo) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.readValue(string, pojo);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
答案 2 :(得分:1)
是的,请检查此link,您可以将列表转换为流,然后使用类似
的内容映射每个值payloadList.stream()
.forEach( s -> mapper.readValue(s,pojo))
.collect(Collectors.toList());