【发布时间】:2019-02-15 03:22:58
【问题描述】:
我想从没有 List 字段的对象列表中获取一个具有 List 字段的对象。
这是我的代码:
public class ObjectDTO {
private List<String> ids;
private List<Date> times;
private List<String> names;
private List<String> details;
public class ObjectDTOHelper {
private String id;
private Date time;
private String name;
private String detail;
}
我提供List<ObjectDTOHelper> 作为输入,并希望仅输出ObjectDTO 的一个对象。
我可以用多个独立的流函数来解决这个问题:
List<ObjectDTOHelper> helpers; //about 1000 elements
List<String> ids= helpers.stream().map(h -> h.id).collect(toList());
List<Date> times= helpers.stream().map(h -> h.time).collect(toList());
List<String> names= helpers.stream().map(h -> h.name).collect(toList());
List<String> details= helpers.stream().map(h -> h.detail).collect(toList());
new ObjectDTO(ids, times, name, detail)
我认为这不是最好的解决方案,因为我需要多做 100_000 次)
您能帮助更好地解决这个问题吗?
【问题讨论】:
-
如果
ObjectDTO必须由所有 4 个列表构成(而不是逐步添加元素),那么这几乎是你能做的最好的事情了。 -
问题中不清楚的是,从大约 1000 个元素,如何以 需要多做 100_000 次?当前解决方案的复杂性也是
O(n),这是一种优化,可能完全是一次迭代。就最佳解决方案而言,效率不高的是将这么多List<T> fields存储在一个对象中。 -
我同意你的观点,但这决定了“设计”,我只是在寻找更好的解决方案。也许我仍然可以改变结构)
标签: java lambda java-8 java-stream