我有两个由字符串组成的并行java数组。在第一个我有一些重复值在第二个数组中有多个匹配。我试图收集重复的值并将它们存储在一组字符串中,我也想收集一组字符串中的匹配值。什么我想要做的例子是这样的:比较Java数组
apple 1
orange 2
apple 3
orange 4
nuts 5
我想他们是这样的:
[apple] [1,3]
[orange] [2,4]
[nuts] [5]
任何想法,我该怎么办呢?
我有两个由字符串组成的并行java数组。在第一个我有一些重复值在第二个数组中有多个匹配。我试图收集重复的值并将它们存储在一组字符串中,我也想收集一组字符串中的匹配值。什么我想要做的例子是这样的:比较Java数组
apple 1
orange 2
apple 3
orange 4
nuts 5
我想他们是这样的:
[apple] [1,3]
[orange] [2,4]
[nuts] [5]
任何想法,我该怎么办呢?
您应该改用Map<String, List<Integer>>
。只需迭代两个数组,然后将值作为键值对添加。
在每次添加之前,使用Map#containsKey(Object)
方法检查密钥是否已经存在。如果已经存在,则使用Map#get(Object)
方法获取与该密钥对应的List
,然后使用List#add(E)
方法在列表中添加新元素。
使用Map<String,List<Integer>>
,遍历int[]
并从索引中获取String[]
数组的值并继续填充Map
。
Map
的键应该是String[]
中的值,值将是List<Integer>
。检查Map
中是否存在密钥,如果存在,则将该整数值添加到List<Integer>
或者创建一个条目,并将该String作为关键字,并创建一个包含该整数值的新List。
的SSCCE是:
String[] keys = {"apple","orange","apple","orange","nuts"};
int[] values = {1,2,3,4,5};
Map<String, List<Integer>> map = new HashMap<String,List<Integer>>();
for(int i=0;i<values.length;i++) {
int value = values[i];
String key = keys[i];
if(map.containsKey(key)){
map.get(key).add(value);
}
else {
List<Integer> list = new ArrayList<>();
list.add(value);
map.put(key, list);
}
}
以下是你需要(在伪代码)的逻辑:
map := new Map<String, Set<Integer>>
for each i in array do
key := array[i][0]
value := array[i][1]
if map not contains key then
map.add(key, new Set<Integer>)
endif
map.get(key).add(value)
endfor
java.util.Map是你的朋友。 –
@kocko - 更具体地说'Map>'(或者使用'Set'而不是'List'来除掉dups)。 –
tjameson
作为一个便笺,向我们展示您所做的一切总是一个好主意。一般来说,围绕您的代码获取答案将有助于您更好地理解解决方案。 –