【发布时间】:2020-08-06 01:52:54
【问题描述】:
我想了解如何将一个对象从一个列表复制/分配到另一个列表?
例如:ClassA有一个Sample类的对象,ClassB也有一个Sample类的对象(您可以在下面的示例中看到这两个类中的其他数据成员不同)。
我有 ClassA 和 ClassB 的列表。
现在,如果我想用 Sample 对象的值在 List 的每个元素中设置类 Sample 的对象来自 List,我如何在 Java 中使用 Functional Style 做到这一点?
我已经展示了如何通过 Imperative Style 来完成,但我真的想在这里使用 streams。
假设: List 和 List 的大小相等
这些是我的课程:
示例:
class Sample {
int a;
String str;
public Sample() {}
public Sample(int a, String str) {
this.a = a;
this.str = str;
}
@Override
public String toString() {
return "Sample [a=" + a + ", str=" + str + "]";
}
}
A 类:
class ClassA {
String someString;
Sample sample;
public ClassA(String someString, Sample sample) {
this.someString = someString;
this.sample = sample;
}
@Override
public String toString() {
return "ClassA [someString=" + someString + ", sample=" + sample + "]";
}
}
B 类:
class ClassB {
int someNumber;
int someOtherNumber;
String someString;
Sample sample;
public ClassB(int someNumber, int someOtherNumber, String someString, Sample sample) {
super();
this.someNumber = someNumber;
this.someOtherNumber = someOtherNumber;
this.someString = someString;
this.sample = sample;
}
@Override
public String toString() {
return "ClassB [someNumber=" + someNumber + ", someOtherNumber=" + someOtherNumber + ", someString="
+ someString + ", sample=" + sample + "]";
}
}
最后是主类:
public class ClassC {
public static void main(String args[]) {
ClassA a1 = new ClassA("abc", new Sample(1, "abc"));
ClassA a2 = new ClassA("def", new Sample(2, "abcde"));
ClassA a3 = new ClassA("pqr", new Sample(3, "abcdf"));
List<ClassA> listOfA = new ArrayList<>();
listOfA.add(a1);
listOfA.add(a2);
listOfA.add(a3);
System.out.println(listOfA);
ClassB b1 = new ClassB(100, 200, "zmr", null);
ClassB b2 = new ClassB(101, 201, "tpu", null);
ClassB b3 = new ClassB(103, 203, "zzz", null);
List<ClassB> listOfB = new ArrayList<>();
listOfB.add(b1);
listOfB.add(b2);
listOfB.add(b3);
System.out.println("before : " + listOfB);
// how to do this using stream ?
for(int i = 0; i < listOfB.size(); i++) {
listOfB.get(i).sample = listOfA.get(i).sample;
}
System.out.println("after : " + listOfB);
}
}
输出:
[ClassA [someString=abc, sample=Sample [a=1, str=abc]], ClassA [someString=def, sample=Sample [a=2, str=abcde]], ClassA [someString=pqr, sample=Sample [a=3, str=abcdf]]]
before : [ClassB [someNumber=100, someOtherNumber=200, someString=zmr, sample=null], ClassB [someNumber=101, someOtherNumber=201, someString=tpu, sample=null], ClassB [someNumber=103, someOtherNumber=203, someString=zzz, sample=null]]
after : [ClassB [someNumber=100, someOtherNumber=200, someString=zmr, sample=Sample [a=1, str=abc]], ClassB [someNumber=101, someOtherNumber=201, someString=tpu, sample=Sample [a=2, str=abcde]], ClassB [someNumber=103, someOtherNumber=203, someString=zzz, sample=Sample [a=3, str=abcdf]]]
【问题讨论】:
标签: java java-8 functional-programming java-stream