有没有办法,如何将List<MyClass>
转换为TreeMap<Long, MyClass>
合理的效果?我在Google Collections中找到了方法Maps.uniqueIndex()
,但它只返回Map
。
列表可以在转换过程中被销毁,我只需要TreeMap。我使用TreeMap是因为我需要使用long进行快速搜索和索引。
提前致谢
答案 0 :(得分:2)
没有比迭代更简单的方法。
Map<Long, MyClass> tree = new HashMap<Long, MyClass>();
for (MyClass cl: classList){
tree.put(cl.getId(), cl);
}
就像Seelenvirtuose提到的那样: 如果您想要搜索性能:HashMap,如果您希望对元素进行排序,请使用TreeMap。 在搜索性能上去了HashMap。
答案 1 :(得分:1)
在 Java 8 中,以最简单的方式使用Stream API:
Map<Long, MyClass> map = myClassList.stream().collect(Collectors.toMap(MyClass::getId, c -> c));
在关注效率时,您应该使用HashMap
代替TreeMap
。指定Map
的实现如下所示:
Map<Long, MyClass> map = myClassList.stream()
.collect(HashMap::new, (map, myClass) -> map.put(myClass.getId(), myClass), HashMap::putAll);