如何连接两个列表以创建第三个列表?
How do I concatenate two lists to create a 3rd?
我一直在谷歌搜索这个,我在番石榴中找到了 this answer. There is an Iterables.concat。但是这个 returns 和 Iterable
我接下来要做的就是对结果进行排序。 Collections.sort
接受 List
,而不是 Iterable
,因此下一步我必须将 Iterable
转换为 List
。有没有更直接的方法将两个List
合并,然后对结果进行排序?
List 有 addAll(Collection
) 方法,我认为这对您的目的很有用。您可以复制第一个列表并制作如下内容:
copyList1.addAll(list2);
您可以使用
List<Something> list1;
List<Something> list2;
list1.addAll(list2);
Collections.sort( list1 );
(假设您的列表是 Comparable
的列表)
如果不想修改list1
,可以使用:
List<Something> list3 = new ArrayList<>();
Collections.copy( list3, list1 );
list3.addAll( list2 );
Collections.sort( list3 );
如果 SortedSet 也像 return 类型一样好(我发现在大多数情况下这是你真正想要的)你可以这样做:
FluentIterable.from( list1 ).concat( list2 ).toSortedSet( Ordering.natural() );
在 Java 8 中(将字符串替换为您的列表包含的任何类型):
List<String> newList = Stream.concat(listOne.stream(), listTwo.stream()).collect(Collectors.<String>toList());
这将连接您的两个列表以创建一个新的第三个列表。然后,您可以使用 Collections.sort
:
按照您在 post 中提到的方式对其进行排序
Collections.sort(newList);
另请参阅:How do I join two lists in Java?
在Java 8:
List<E> sorted = Stream.concat(l1.stream(), l2.stream())
.sorted()
.collect(Collectors.toList());
List<Something> list = Lists.newArrayList(Iterables.concat(...));
Collections.sort(list);
这里可能是一个解决方案。
以下应与 JAVA 8 Stream API
一起使用
class T {
@Getter private int sortingProperty;
}
List<T> list3 Stream.of(list1OfT,list2OfT)
.sorted(Comparing(T::getSortingProperty))
.collect(toList());
我一直在谷歌搜索这个,我在番石榴中找到了 this answer. There is an Iterables.concat。但是这个 returns 和 Iterable
我接下来要做的就是对结果进行排序。 Collections.sort
接受 List
,而不是 Iterable
,因此下一步我必须将 Iterable
转换为 List
。有没有更直接的方法将两个List
合并,然后对结果进行排序?
List 有 addAll(Collection
) 方法,我认为这对您的目的很有用。您可以复制第一个列表并制作如下内容:
copyList1.addAll(list2);
您可以使用
List<Something> list1;
List<Something> list2;
list1.addAll(list2);
Collections.sort( list1 );
(假设您的列表是 Comparable
的列表)
如果不想修改list1
,可以使用:
List<Something> list3 = new ArrayList<>();
Collections.copy( list3, list1 );
list3.addAll( list2 );
Collections.sort( list3 );
如果 SortedSet 也像 return 类型一样好(我发现在大多数情况下这是你真正想要的)你可以这样做:
FluentIterable.from( list1 ).concat( list2 ).toSortedSet( Ordering.natural() );
在 Java 8 中(将字符串替换为您的列表包含的任何类型):
List<String> newList = Stream.concat(listOne.stream(), listTwo.stream()).collect(Collectors.<String>toList());
这将连接您的两个列表以创建一个新的第三个列表。然后,您可以使用 Collections.sort
:
Collections.sort(newList);
另请参阅:How do I join two lists in Java?
在Java 8:
List<E> sorted = Stream.concat(l1.stream(), l2.stream())
.sorted()
.collect(Collectors.toList());
List<Something> list = Lists.newArrayList(Iterables.concat(...));
Collections.sort(list);
这里可能是一个解决方案。
以下应与 JAVA 8 Stream API
一起使用class T {
@Getter private int sortingProperty;
}
List<T> list3 Stream.of(list1OfT,list2OfT)
.sorted(Comparing(T::getSortingProperty))
.collect(toList());