2012-01-16 69 views
0

如何在Java中组合两个列表? 输出到目前为止是:如何将两个列表与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()); 
} 
} 
+1

定义“结合”:你想一个'List'不重复的项目?你不能只用一个'Set'吗? – Viruzzo 2012-01-16 16:20:40

+0

我已经更新了输出的问题,我期待得到。对不起,我仍然是这个语言的初学者。 – Aaron 2012-01-16 16:24:01

回答

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); 
+0

他甚至可以跳过这个集合(除非他想确保唯一性)并且只给另一个列表添加一个列表。 – Viruzzo 2012-01-16 16:28:52

3

由于Java是一种面向对象的语言,我会使用对象有两个字段firstNamelastName 。这将使得将这两个列表加在一起更简单。您可以将toString方法添加到您将生成所需输出的新类中。

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); 
} 

这么说,我同意彼得的回答是:你应该使用一个Person对象具有两个属性:firstNamelastName

备注:我重命名了您的变量以使代码更具可读性。

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

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

基本上,这将创建一个ArrayList(或者,因为你知道的大小,你可以创建一个数组),然后一个接一个的名称添加到它,从两份名单梳理串为你做。

0

如果要合并Firstname1 - > Lastname1; FIRSTNAME2 - > 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()); 
    } 
} 
相关问题