我有一个HashMap<String, Double>
,如arr1[]-{AA=0.05, BB=0.031, CC=0.056}
和List<ArrayList<String>>
,如arr2[]-[ [AA,BB,CC] , [BB, CC] , [AA, CC]].
,我希望获得List<ArrayList<Double>>
之类的输出。它将是[ [0.05,0.031,0.056] , [0.031, 0.056] , [0.05, 0.056]].
我用了,
for (int i = 0; i < arr2.size(); i++) {
if (arr1.containsKey(arr2.get(i))) {
但是,不行。怎么做?
答案 0 :(得分:3)
使用stream API:
可以轻松实现lists.stream()
.map(list -> list.stream().map(map::get).collect(Collectors.toCollection(ArrayList::new))
.collect(Collectors.toList());
假设lists
这里是您的List<ArrayList<String>>
而map
是您的HashMap<String, Double>
,这将返回您期望的List<ArrayList<Double>>
。
我想补充一点,我不知道你为什么要在列表中添加ArrayList
,但如果没有具体原因,请使用Collectors.toList()
代替Collectors.toCollection(ArrayList::new)
。
答案 1 :(得分:1)
你走了:
Map<String, Double> mappings = //get mappings
List<ArrayList<String>> source = //get source
List<ArrayList<Double>> target = new ArrayList<>();
for(ArrayList<String> sourceElement : source){
ArrayList<Double> targetElememt = new ArrayList<>();
for(String sourceElementString : sourceElement){
targetElememt.add(mappings.get(sourceElementString));
}
target.add(targetElememt);
}
System.out.println(target);