我一直在谷歌搜索,我找到了this answer。番石榴中有一个Iterables.concat。但是这会返回Iterable
,接下来要做的就是对结果进行排序。 Collections.sort
只需List
而不是Iterable
,因此我必须将Iterable
转换为List
作为我的下一步。是否有更直接的方法来组合两个List
然后对结果进行排序?
答案 0 :(得分:6)
在Java 8中:
List<E> sorted = Stream.concat(l1.stream(), l2.stream())
.sorted()
.collect(Collectors.toList());
答案 1 :(得分:4)
List<Something> list = Lists.newArrayList(Iterables.concat(...));
Collections.sort(list);
可能是一个解决方案。
答案 2 :(得分:3)
列表包含addAll(Collection
)方法,我认为这对您的目的很有用。您可以复制第一个列表并进行如下操作:
copyList1.addAll(list2);
答案 3 :(得分:2)
如果一个SortedSet也很好作为返回类型(我发现这是你真正想要的那个),你可以这样做:
FluentIterable.from( list1 ).concat( list2 ).toSortedSet( Ordering.natural() );
答案 4 :(得分:1)
您可以使用
List<Something> list1;
List<Something> list2;
list1.addAll(list2);
Collections.sort( list1 );
(假设您的列表是Comparable
s)的列表
如果您不想修改list1
,可以使用:
List<Something> list3 = new ArrayList<>();
Collections.copy( list3, list1 );
list3.addAll( list2 );
Collections.sort( list3 );
答案 5 :(得分:1)
在Java 8中(用您的列表包含的任何类型替换String):
List<String> newList = Stream.concat(listOne.stream(), listTwo.stream()).collect(Collectors.<String>toList());
这将连接您的两个列表以创建新的第3个列表。然后,您可以使用Collections.sort
Collections.sort(newList);
答案 6 :(得分:1)
以下内容适用于JAVA 8 Stream API
class T {
@Getter private int sortingProperty;
}
List<T> list3 Stream.of(list1OfT,list2OfT)
.sorted(Comparing(T::getSortingProperty))
.collect(toList());