例如,我目前正在做这件事:
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);
ArrayList
的类型参数,从而产生以下结果:```List l = new ArrayList<>(listOfTopicAuthors);```
最简洁的方法是不使用外部库吗? - Brett DuncavagelistOfTopicAuthors
为空,它将抛出NullPointerException。 - w35l3yList<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类型、可变性、可串行化性或线程安全性均不做保证;如果需要更多控制返回的List,可以使用toCollection(Supplier)。因此,如果我们需要特定的实现,比如ArrayList
,可以通过以下方式获取:List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
我们可以使用Collections :: unmodifiableList
方法并包装在先前示例中返回的列表。我们还可以编写自己的自定义方法,如下所示:
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返回指定列表的不可修改视图。不可修改视图集合是一个不可修改的集合,并且也是对支持集合的视图。请注意,对支持集合的更改仍然可能发生,如果发生,则通过不可修改视图可见。但是,收集器方法Collectors.unmodifiableList
在Java 10中返回真正的不可变列表。
Set<Double>
转换为 List<Double>
,其中的 set 是从 LinkedHashMap
的 .keySet()
方法中获取的。Eclipse 告诉我存在类型不匹配的问题,无法将 Object
转换为 List<Double>
。您能告诉我为什么会出现这种情况吗?我通过强制转换来解决了这个问题,但我想知道它为什么会发生。 - Ungeheuer尝试使用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());
我不太确定你在代码上下文中究竟在做什么,但...
为什么要创建listOfTopicAuthors
变量呢?
List<String> list = Arrays.asList((....).toArray( new String[0] ) );
"...." 代表你的设置是如何发挥作用的,无论它是新的还是来自其他位置。
java.util.Collection
:O(1) - TimSet<String> setOfTopicAuthors = ....
实际:Set<String> listOfTopicAuthors = ....
- realPKList<String> list = Arrays.asList(setOfTopicAuthors.toArray(String[]::new))
,详见链接中的答案。 - Naman