如何在Java中将两个列表与相同数量的元素组合在一起?

时间:2012-01-16 16:18:45

标签: java list

如何在Java中组合两个列表? 到目前为止的输出是:

Firstname1
Firstname2
Firstname3
Lastname1
Lastname2
Lastname3
[[Firstname1, Firstname2, Firstname3], [Lastname1, Lastname2, Lastname3]]

我希望输出为:

[Firstname1 Lastname1,Firstname2 Lastname2,Firstname3 Lastname3}

import java.util.Arrays;
import java.util.List;
import java.util.Iterator;
import java.util.HashSet;

public class Main {

public static void main(String[] args) {
   List<String> peoplFname = Arrays.asList("Firstname1", "Firstname2", "Firstname3");
   List<String> peoplLname = Arrays.asList("Lastname1", "Lastname2", "Lastname3");
   Iterator<String> iterator = peoplFname.iterator();
   while(iterator.hasNext()) {
        System.out.println(iterator.next());
   }

   Iterator<String> iteratorx = peoplLname.iterator();
   while(iteratorx.hasNext()) {
       System.out.println(iteratorx.next());
   }

   HashSet peopleFullName = new HashSet();

   peopleFullName.add(peoplFname);
   peopleFullName.add(peoplLname);

   System.out.println(peopleFullName.toString());
}
}

5 个答案:

答案 0 :(得分:7)

使用addAll代替add,以便将列表中的所有元素添加到您的集合中。

将您的代码更改为:

peopleFullName.addAll(peoplFname);
peopleFullName.addAll(peoplLname);

<强>更新

根据更新的问题,您似乎想要合并两个列表中的相应元素。你走在正确的轨道上。您只需要遍历两个列表,使用姓氏加入第一个名称,然后将其添加到结果列表中:

List<String> peoplFname = Arrays.asList("Firstname1", "Firstname2", "Firstname3");
List<String> peoplLname = Arrays.asList("Lastname1", "Lastname2", "Lastname3");

Iterator<String> iterator = peoplFname.iterator();
Iterator<String> iteratorx = peoplLname.iterator();

List<String> peopleFullName = new ArrayList<String>(); 

while(iterator.hasNext() && iteratorx.hasNext()) {
    String fullName = iterator.next() + " " + iteratorx.next();
    peopleFullName.add(fullName);
}

System.out.println(peopleFullName);

答案 1 :(得分:3)

由于Java是面向对象的语言,我会使用带有两个字段firstNamelastName的Object。这样可以使两个列表更加简单。您可以向新类添加toString方法,这将产生您想要的输出。

答案 2 :(得分:2)

如果我理解正确,你想要的是连接两个列表中的元素:

List<String> fullNames = new ArrayList<String>(firstNames.size());
for (int i = 0; i < firstNames.size(); i++) {
    fullNames.add(firstNames.get(i) + " " + lastNames.get(i));
}

或者,使用迭代器(如果列表是没有数组支持的长列表,那么这很重要):

List<String> fullNames = new ArrayList<String>(firstNames.size());
Iterator<String> lastNameIterator = lastNames.iterator();
for (Iterator firstNameIterator = firstNames.iterator(); firstNameIterator.hasNext();) {
    String firstName = firstNameIterator.next();
    String lastName = lastNameIterator.next();
    fullNames.add(firstName + " " + lastName);
}

那就是说,我同意Peter的回答:你应该使用一个Person对象,它有两个属性:firstNamelastName

附注:我重命名了你的变量,使代码更具可读性。

答案 3 :(得分:1)

ArrayList<String> peopleFullNames = new ArrayList<String>();

for(i = 0; i < peopleFName.length; i++){
    peoplNames.add(peopleFName.get(i) + " " + peopleLName.get(i));
}

基本上,这将创建一个ArrayList(或者,你可以创建一个数组,因为你知道它的大小),然后逐个添加名称,并在这两个列表中组合字符串。

答案 4 :(得分:0)

如果你想组合Firstname1 - &gt; Lastname1; Firstname2 - &gt; Lastname2 ....

你应该做一个简单的:

String[] fullName = new String[peoplFname.size()];
for(int i = 0; i < peoplFname.size(); i++)
{
    fullName[i] = peopleFname.get(i)+" "+peopleLname.get(i);
}

考虑到peopleFname和peopleLname具有相同数量的元素。 如果你想制作所有可能的名字组合,你应该在另一个组合内。因此,对于名字,所有姓氏都将被迭代,并且所有名字都会发生:

ArrayList<String> allCombinations = new ArrayList<String>();

Iterator<String> iterator = peoplFname.iterator();
while(iterator.hasNext()) {        
    Iterator<String> iteratorx = peoplLname.iterator();
    while(iteratorx.hasNext()) {
        allCombinations.add(iterator.next()+" "+iteratorx.next());
    }
}