组合ArrayList和Array以形成某种模式的结果数组

时间:2017-11-09 09:43:56

标签: java arrays arraylist

我有一个整数类型的ArrayList和一个字符串类型的数组。我想形成一个结果阵列,它是两者的组合。约束是我不允许使用任何地图界面。

示例:

ArrayList<Integer> al=[1,2,3,4,5,6,7,8,9]
String name[]={"Cat","bat","mat"} 
//my resultant array should look like this
//String result[]=[cat[1,2,3],bat[4,5,6],mat[7,8,9]]

请告诉我实现这一目标的有效方法。

提前谢谢你。

3 个答案:

答案 0 :(得分:1)

因为结果是String类型,您可以使用List::subList从列表中获取范围,例如:

List<Integer> al = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
String[] names = {"Cat", "bat", "mat"};
String[] result = new String[names.length];
int j = 3;

for (int i = 0; i < names.length; i++) {
    result[i] = names[i] + al.subList(j - 3, j);
    j += 3;
}
System.out.println(Arrays.asList(result));

OUPUTS

[Cat[1, 2, 3], bat[4, 5, 6], mat[7, 8, 9]]

注意

在使用数组和列表之前必须检查长度,否则可能会出现错误ArrayIndexOutOfBoundsException异常

答案 1 :(得分:0)

我会以下列方式解决这个问题。 创建具有(String name,int [] number)作为其成员的入口类。 然后根据逻辑填充此类的对象以生成

name: cat, int [] number= 1,2,3.

外部数组将是这些Entry对象的集合。

入门课程

class Entry{
String name;
int[] numbers;
Entry(String name, int[] numbers){
}
}

答案 2 :(得分:0)

您可以按列表的长度划分列表大小,获取阈值并使用它将结果存储到Map中,例如:

List<Integer> al= Arrays.asList(1,2,3,4,5,6,7,8,9);
String name[]= new String[]{"Cat","bat","mat"};

int elementsPerNode = al.size() / name.length;

Map<String, List<Integer>> resultMap = new LinkedHashMap<>();
for(String element : name) {
    resultMap.put(element, new ArrayList<Integer>());
}

for(int i=0 ; i < al.size() ; i++) {
    resultMap.get(name[i / elementsPerNode]).add(al.get(i));
}

System.out.println(resultMap);