我使用此代码将 Set
转换为 List
:
Map<String, List> mainMap = new HashMap<String, List>();
for(int i=0; i<something.size(); i++){
Set set = getSet(...); //returns different result each time
List listOfNames = new ArrayList(set);
mainMap.put(differentKeyName,listOfNames);
}
我想避免在循环的每次迭代中创建一个新列表 . 那可能吗?
12 回答
您可以使用List.addAll()方法 . 它接受一个Collection作为参数,你的集合是一个集合 .
EDIT: 作为对问题编辑的回应 .
很容易看出,如果你想将
Map
与List
s作为值,为了得到k个不同的值,你需要创建k个不同的列表 .因此:您根本无法避免创建这些列表,必须创建列表 .
可能的解决方法:
将
Map
声明为Map<String,Set>
或Map<String,Collection>
,然后插入您的设置 .使用构造函数转换它:
同样来自Guava Collect库,您可以使用
newArrayList(Collection)
:这与 amit 之前的答案非常相似,只是您不需要声明(或实例化)任何
list
对象 .我们可以在Java 8中使用以下一个内容:
这是一个小例子:
我想要一个非常快速的方法将我的设置转换为List并返回它,所以在一行中我做了
您可以使用以下一行更改:
Arrays.asList(set.toArray(new Object[set.size()]))
我会做 :
我创建简单的
static
方法:...或者如果你想设置List的类型,你可以使用:
Java 8提供了使用流的选项,您可以从
Set<String> setString
获取列表:虽然现在的内部实现提供了
ArrayList
的实例:但JDK不保证 . 如上所述here:
如果您想确保始终如此,那么您可以专门请求实例:
最近我发现了这个:
我发现这个工作正常,可用于从Set创建List .