我有两个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
我没有找到明确的教程或其他东西。有什么想法吗?
答案 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
}