要求如下:
class ProA {
String key1;
String key2;
String v1;
}
class ProB {
String key1;
String key2;
String v2;
}
class MergedAB {
String key1;
String key2;
String v1;
String v2;
}
让ProA[]数组和ProB[]数组能够合并成一个MergedAB[]数组.
数组中的元素合并的规则是: 当ProA.key1的值等于ProB.key1的值, 且ProA.key2的值等于ProB.key2值时,
就把ProA和ProB两个实例合并起来, 形成一个新的MergedAB实例并放入MergedAB[]数组.
其中:
MergedAB.key1 = ProA.key1 = ProB.key1,
MergedAB.key2 = ProA.key2 = ProB.key2,
MergedAB.v1 = ProA.v1,
MergedAB.v2 = ProB.v2
比如 arrProA数组为:
[
{key1: "alice", key2: "box", v1: "xx"},
{key1: "alice", key2: "bob", v1: "yy"},
{key1: "catch", key2: "dog", v1: "zz"}
]
arrProB数组为:
[
{key1: "alice", key2: "bob", v2: "oo"},
{key1: "alice", key2: "bee", v2: "pp"}
]
那么合并后的MergedAB数组就应该为:
[
{key1: "alice", key2: "bob", v1: "yy", v2: "oo"}
]
简单完成代码如下:
package eg01;
import java.util.Arrays;
//题目eg01.txt
public class Eg01 {
public static void main(String[] args) {
ProA[] proAList = new ProA[3];
ProB[] proBList = new ProB[3];
MergedAB[] mergedABList = new MergedAB[3];
// 测试对象数组ProA的输出
// System.out.println("数组声明测试:------------------------");
// for (int i = 0; i < proAList.length; i++){
// System.out.println(proAList[i]+" ");
// }
//预读对象数组:ProAList:
ProA proA1 = new ProA("Tom","boy","TomV1");
ProA proA2 = new ProA("Alice","girl","AliceV1");
ProA proA3 = new ProA("Py","boy","PyV1");
proAList[0] = proA1;
proAList[1] = proA2;
proAList[2] = proA3;
// System.out.println("数组实例测试:--------------------------------");
// for (int i = 0; i < proAList.length; i++){
// System.out.println(proAList[i]+" ");
// }
ProB proB1 = new ProB("Ton","boy","TonV2");
ProB proB2 = new ProB("Alice","girl","AliceV2");
ProB proB3 = new ProB("Py","girl","PyV2");
proBList[0] = proB1;
proBList[1] = proB2;
proBList[2] = proB3;
MergedAB mergedAB1 = new MergedAB("","","","");
MergedAB mergedAB2 = new MergedAB("","","","");
MergedAB mergedAB3 = new MergedAB("","","","");
mergedABList[0] = mergedAB1;
mergedABList[1] = mergedAB2;
mergedABList[2] = mergedAB3;
//mergedABList[3] = mergedAB4;
for(int i = 0; i < proAList.length; i++){
//System.out.println(i);
for(int j = 0; j < proBList.length; j++){
//System.out.println(j);
// System.out.println(proAList[i].key1.equals(proBList[j].key1) && proAList[i].key2.equals(proBList[j].key2));
if (proAList[i].key1.equals(proBList[j].key1) && proAList[i].key2.equals(proBList[j].key2)){
// mergedABList[i].key1 = proAList[i].key1;
// mergedABList[i].key2 = proAList[i].key2;
// mergedABList[i].v1 = proAList[i].v1;
// mergedABList[i].v2 = proBList[j].v2;
int k = 0;
mergedABList[k].key1 = proAList[i].key1;
mergedABList[k].key2 = proAList[i].key2;
mergedABList[k].v1 = proAList[i].v1;
mergedABList[k].v2 = proBList[j].v2;
k++;
}
}
}
System.out.println("合并输出测试:--------------------------------");
for (int i = 0; i < mergedABList.length; i++){
if (mergedABList[i].key1!="") {
System.out.println(mergedABList[i] + " ");
}
}
}
}
class ProA{
String key1;
String key2;
String v1;
public ProA(String key1, String key2, String v1) {
this.key1 = key1;
this.key2 = key2;
this.v1 = v1;
}
@Override
public String toString() {
return "ProA{" +
"key1='" + key1 + '\'' +
", key2='" + key2 + '\'' +
", v1='" + v1 + '\'' +
'}';
}
}
class ProB{
String key1;
String key2;
String v2;
public ProB(String key1, String key2, String v2) {
this.key1 = key1;
this.key2 = key2;
this.v2 = v2;
}
@Override
public String toString() {
return "ProB{" +
"key1='" + key1 + '\'' +
", key2='" + key2 + '\'' +
", v2='" + v2 + '\'' +
'}';
}
}
class MergedAB{
String key1;
String key2;
String v1;
String v2;
public MergedAB(String key1, String key2, String v1, String v2) {
this.key1 = key1;
this.key2 = key2;
this.v1 = v1;
this.v2 = v2;
}
@Override
public String toString() {
return "MergedAB{" +
"key1='" + key1 + '\'' +
", key2='" + key2 + '\'' +
", v1='" + v1 + '\'' +
", v2='" + v2 + '\'' +
'}';
}
}
输出结果:
大家可以再自己思考一下这道题涉及到的知识点:
比如在实例测试的时候,如果没有toString()方法,输出会是什么样,为什么?
比如如果没有实例化,输出又会是什么样,为什么?