Tag: collections

如何在Java列表中获得反向列表视图?

我想在列表上有一个反向列表视图(以类似于List#sublist方式在List#sublist提供子列表视图)。 是否有一些提供此function的function? 我不想制作任何类型的列表副本,也不想修改列表。 如果我在这种情况下至少可以在列表上获得反向迭代器就足够了。 另外,我知道如何自己实现这一点。 我只是想问Java是否已经提供了这样的东西。 演示实施: static Iterable iterableReverseList(final List l) { return new Iterable() { public Iterator iterator() { return new Iterator() { ListIterator listIter = l.listIterator(l.size()); public boolean hasNext() { return listIter.hasPrevious(); } public T next() { return listIter.previous(); } public void remove() { listIter.remove(); } }; } }; } 我刚刚发现一些List实现有descendingIterator() ,这是我需要的。 […]

Google Guava vs. Apache Commons

我一直在寻找Java中的双向映射实现,偶然发现了这两个库: Google Guava (以前称为“Google Collections”) Apache Commons Collections 两者都是免费的,具有我正在寻找的双向地图实现(Apache中的BidiMap,Google中的BiMap),几乎相同的大小(Apache 493 kB,Google 499 kB)[编辑:不再是真的!]并且似乎在各方面都和我很相似。 我应该选择哪一个,为什么? 是否有一些其他等效的替代品(必须是免费的,至少有双向地图)? 我正在使用最新的Java SE,因此不需要人为地限制Java 5或类似的东西。

何时在Java中使用LinkedList over ArrayList?

我一直只是一个人使用: List names = new ArrayList(); 我使用接口作为可移植性的类型名称,因此当我问这些问题时,我可以重新编写代码。 何时应该使用LinkedList而不是ArrayList ,反之亦然?

Java 8嵌套(多级)组

我有几个类,如下 class Pojo { List items; } class Item { T key1; List subItems; } class SubItem { V key2; Object otherAttribute1; } 我想基于key1聚合项目,对于每个聚合,子项应由key2按以下方式聚合: Map<T, Map<V, List> 如何使用Java 8 Collectors.groupingBy嵌套? 我正在尝试一些东西并且中途停留 pojo.getItems() .stream() .collect( Collectors.groupingBy(Item::getKey1, /* How to group by here SubItem::getKey2*/) ); 注意:这与级联groupingBy ,后者基于此处讨论的同一对象中的字段进行多级聚合