-1

我有两个由字符串组成的并行 java 数组。在第一个中,我有一些重复的值在第二个数组中有多个匹配项。我正在尝试收集重复的值并将它们存储在一组字符串中,我还想在一组字符串中收集匹配的值。我想要做的例子是这样的:

apple        1
orange       2
apple        3
orange       4
nuts         5

我希望他们是这样的:

[apple] [1,3]
[orange]  [2,4]
[nuts]    [5]

知道我该怎么做吗?

4

3 回答 3

2

你应该使用 aMap<String, List<Integer>>代替。只需遍历两个数组,并将值添加为键值对。

每次添加前,使用Map#containsKey(Object)方法检查key是否已经存在。如果它已经存在,则使用方法获取List与该键对应Map#get(Object)的元素,然后使用方法将新元素添加到列表中List#add(E)

于 2013-07-16T15:40:58.393 回答
0

这是您需要的逻辑(在伪代码中):

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
于 2013-07-16T15:47:25.627 回答
0

使用 a Map<String,List<Integer>>,遍历int[]并按索引从String[]数组中获取值并继续填充Map.

的键Map应该是 in 的值,String[]而值是List<Integer>. 检查 中是否存在Map,如果存在,则将整数值添加到 中,List<Integer>否则以该字符串作为键创建一个条目,并创建一个包含整数值的新列表。

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);
    }
}
于 2013-07-16T15:41:53.630 回答