Android - 如何组合两个ArrayLists

时间:2015-05-12 00:32:55

标签: java android arrays loops arraylist

我有两个ArrayLists,是从解析​​后的html创建的。第一个包含作业,就像

Job A
Job B
Job C

,第二个就像

Company A
Company B
Company C

我需要的是Job A和A公司等的组合,所以我可以得到结果(一个ArrayList也会很棒)

Job A : Company A
Job B : Company B
Job C : Company C

我没有找到明确的教程或其他东西。有什么想法吗?

5 个答案:

答案 0 :(得分:5)

您确定要查看正确的数据结构吗?

为什么不使用Map?您可以定义此路线的键/值关系。

Map<Company, Job> jobMap = new HashMap<Company, Job>();
jobMap.put("Company A" /* or corresponding list item */, "Job A" /* or corresponding list item */);

您甚至可能会这样做:(将字符串交换到适合您实现的字符串)

Map<Company, List<Job>> jobMap...;
List<Job> jobList = new ArrayList<Job>();
jobList.add("Job A");
jobList.add("Job B");
jobList.add("Job C");
jobMap.put("Company A", jobList);

这样做是将公司定义为您的钥匙,您可以将多个工作设置为公司

答案 1 :(得分:1)

if (jobs.length() != companies.length()) {
    throw new InvalidArgumentException("Mismatch of jobs and companies");
}

for (int i = 0; i < jobs.length(); i++) {
   combine(jobs.get(i), companies.get(i));
}

有很多方法可以组合两种对象之间的引用。这是一个灵活的示例,可让您使用一个查找另一个。如果你知道你总是用它来进行查找,那就太过分了。使用LinkedHashMap也会保留插入顺序。因此,如果您决定将它们放入B,C,A订单中,您可以将它们以B,C,A顺序排出。

LinkedHashMap<Job, Company> jobToCompany = new LinkedHashMap<>();
LinkedHashMap<Company, Job> companyToJob = new LinkedHashMap<>();

private void combine(Job job, Company company) {
    jobToCompany.put(job, company);
    companyToJob.put(company, job);
}

答案 2 :(得分:0)

如果您不愿意使用地图(不知道为什么会这样),我的方法是:要创建另一个包含Company和Job属性的类(我们称之为CompanyJob),那么只需拥有一个CompanyJob实例的集合(ArrayList就可以)。

class CompanyList{
  private Company mCompany;
  private Job mJob;
  public CompanyList (Company com, Job job){
    mCompany = com;
    mJob = job;
  }
  // Some logic ...
}
// Then your list
private ArrayList<CompanyList> yourList = new ArraList <>();
int i = 0;
for (Company tmpCom: companyList){
  yourList.add (new CompanyJob (tmpCom,jobList.get(i));
  i++;
}

答案 3 :(得分:0)

如果您确实要将合并后的值存储在ArrayList中,那么以下代码将对您有用:

List<String> jobs = new ArrayList<>(); 
List<String> companies = new ArrayList<>();
List<String> mergedList = new ArrayList<>();
//assuming the value are populated for `jobs` and `companies`. 
if(jobs.size() == companies.size()) {
    int n = jobs.size();
    for(int index=0; index<n; index++)
    {
        mergedList.add(jobs.get(index) + " : " + companies.get(index))
    }
} else {
    System.out.println("Cannot combine");
    //Throw exception or take any action you need.
}

请记住,如果您需要搜索任何项目,那么它将是O(n),但我认为您在决定使用ArrayList之前已经了解它。

答案 4 :(得分:-1)

您需要创建一个新的

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

还需要一个柜台。

int position = 0;

然后遍历列表(考虑到列表的大小相同)。

for(String item:firstList){
third.add(item+ " : " + secondList.get(position);
position ++;
}

然后第三将获得所需的结果。

确认:

for (String item:third){
//try to print "item" here
}