例如,我目前正在这样做:
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
你能打败这个吗?
例如,我目前正在这样做:
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
你能打败这个吗?
List<String> list = new ArrayList<String>(listOfTopicAuthors);
List<String> l = new ArrayList<String>(listOfTopicAuthors);
考虑到我们有Set<String> stringSet
我们可以使用以下内容:
List<String> strList = new ArrayList<>(stringSet);
List<String> strList = Lists.newArrayList(stringSet);
List<String> strList = new ArrayList<>();
CollectionUtils.addAll(strList, stringSet);
List<String> strList = List.copyOf(stringSet);
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
根据该方法的文档toList()
不保证返回的 List 的类型、可变性、可序列化性或线程安全性;如果需要对返回的列表进行更多控制,请使用 toCollection(Supplier)。
因此,如果我们需要一个特定的实现,例如ArrayList
,我们可以通过以下方式获得它:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
我们可以利用Collections::unmodifiableList
method 并包装前面示例中返回的列表。我们也可以编写自己的自定义方法:
class ImmutableCollector {
public static <T> Collector<T, List<T>, List<T>> toImmutableList(Supplier<List<T>> supplier) {
return Collector.of( supplier, List::add, (left, right) -> {
left.addAll(right);
return left;
}, Collections::unmodifiableList);
}
}
然后将其用作:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
另一种可能性是使用collectingAndThen
允许在返回结果之前完成一些最终转换的方法:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
需要注意的一点是,该方法Collections::unmodifiableList
根据doc返回指定列表的不可修改视图。不可修改的视图集合是不可修改的集合,也是支持集合的视图。请注意,对支持集合的更改可能仍然是可能的,并且如果发生更改,它们将通过不可修改的视图可见。但是收集器方法在Java 10Collectors.unmodifiableList
中返回真正不可变的列表。
试试这个Set:
Set<String> listOfTopicAuthors = .....
List<String> setList = new ArrayList<String>(listOfTopicAuthors);
试试这个Map:
Map<String, String> listOfTopicAuthors = .....
// List of values:
List<String> mapValueList = new ArrayList<String>(listOfTopicAuthors.values());
// List of keys:
List<String> mapKeyList = new ArrayList<String>(listOfTopicAuthors.KeySet());
如果您使用 Guava,则从Lists类中静态导入newArrayList
方法:
List<String> l = newArrayList(setOfAuthors);
不太确定您通过代码的上下文到底在做什么,但是......
为什么要制作listOfTopicAuthors
变量?
List<String> list = Arrays.asList((....).toArray( new String[0] ) );
“....” 代表您的套装开始发挥作用,无论它是新的还是来自其他位置。