我为以下场景做了很多工作,但我无法获得所需的输出。
我被困在我所拥有的场景中:
Arraylist1 = {10,20,30};
Arraylist2 = {4,5,7}
我希望输出为:
Combined: [10, 4, 10, 5, 10, 7, 20, 4, 20 ,5, 20, 7, 30, 4, 30, 5, 30, 7]
我所做的所有事情都在追随:
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(10); numbers.add(20); numbers.add(30); numbers.add(40);
ArrayList<Integer> numbers2 = new ArrayList<Integer>();
numbers2.add(4); numbers2.add(5); numbers2.add(7);
List<Integer> interleaved = interleave(numbers, numbers2);
System.out.println("\nCombined: " + interleaved);
public static List<Integer> interleave(final List<Integer> list1, final List<Integer> list2) {
List<Integer> result = new ArrayList<Integer>(list2.size() + list1.size());
Iterator<Integer> it1 = list1.iterator();
Iterator<Integer> it2 = list2.iterator();
while (it1.hasNext() || it2.hasNext()) {
if (it1.hasNext()) {
result.add(it1.next());
}
if (it2.hasNext()) {
result.add(it2.next());
}
}
return result;
}
但我得到的输出是
Combined: [10, 4, 20, 5, 30, 7]
我希望输出像
Combined: [10, 4, 10, 5, 10, 7, 20, 4, 20 ,5, 20, 7, 30, 4, 30, 5, 30, 7]
答案 0 :(得分:5)
您不应该并行迭代这两个列表。你需要一个嵌套的for循环。像这样:
for elem1 in list1
for elem2 in list2
add elem1 to result
add elem2 to result
只需将伪代码转换为增强型for循环或使用迭代器转换为while循环。使用迭代器回退是需要为每个外部循环迭代重新创建list2
的迭代器。
答案 1 :(得分:0)
我认为你的交错方法应该是:
List<Integer> result = new ArrayList<Integer>(list2.size()
+ list1.size());
for (int i : list1) {
for (int j : list2) {
result.add(i);
result.add(j);
}
}
return result;
答案 2 :(得分:0)
我认为你的循环错误。
基本上你需要做什么。
即
for(Integer intval1 : list1)
{
for(Integer intval2: list2)
{
result.add(intval1);
result.add(intval2);
}
}
答案 3 :(得分:0)
将交错方法更改为。
我们想要的是:
因此我们将这些元素添加到内部for循环
中public static List<Integer> interleave(final List<Integer> list1,
final List<Integer> list2) {
List<Integer> result = new ArrayList<Integer>();
for (Integer num : list1) {
for (Integer num2 : list2) {
result.add(num);
result.add(num2);
}
}
return result;
}
为此目的,您不需要Iterator
。如上所述使用增强型for循环。
不确定它是否为您的目的服务,但您也可以为列表设置键值对。
Map<Integer,List<Integer>> map = new ArrayList<Integer, List<Integer>>();
for(Integer num : list1 ){
map.put(num,list2);
}
如果您需要一对多关系
,可以在此处创建键值对答案 4 :(得分:0)
您可以为此更改循环:
for (int i = 0; i < list1.size(); i++) {
for (int j = 0; j < list2.size(); j++){
result.add(list1.get(i));
result.add(list2.get(j));
}
}
由于
答案 5 :(得分:0)
private void listEntryCalc()
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
ArrayList<Integer> numbers2 = new ArrayList<Integer>();
numbers2.add(4);
numbers2.add(5);
numbers2.add(7);
List<Integer> finalList = new ArrayList<>();
for (Integer integer : numbers)
{
for (Integer integer1 : numbers2)
{
finalList.add(integer);
finalList.add(integer1);
}
}
System.out.println("list " + finalList);
}
输出为:
[10, 4, 10, 5, 10, 7, 20, 4, 20, 5, 20, 7, 30, 4, 30, 5, 30, 7, 40, 4, 40, 5, 40, 7]