Java 8-如何从另一个列表中的对象设置列表中的对象?
我想了解如何将一个对象从一个列表复制/分配到另一个列表 例如:ClassA有一个classSample的对象,ClassB也有一个classSample的对象(如下面的示例所示,这两个类中的其他数据成员不同) 我有ClassA和ClassB的列表 现在,如果我想在列表Java 8-如何从另一个列表中的对象设置列表中的对象?,java,java-8,functional-programming,java-stream,Java,Java 8,Functional Programming,Java Stream,我想了解如何将一个对象从一个列表复制/分配到另一个列表 例如:ClassA有一个classSample的对象,ClassB也有一个classSample的对象(如下面的示例所示,这两个类中的其他数据成员不同) 我有ClassA和ClassB的列表 现在,如果我想在列表的每个元素中用列表中的Sample对象的值设置类Sample的对象,我如何使用Java中的函数式来实现这一点 我已经展示了如何通过命令式风格来实现这一点,但是我真的想在这里使用流 假设:列表和列表的大小相等 这些是我的课程: 样
假设:列表
这些是我的课程: 样本:
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);
}
}
你们可以用功能性的方式来做,但老实说,两者都是一样的
IntStream.range(0, listOfB.size())
.forEach(i -> listOfB.get(i).sample = listOfA.get(i).sample);
这里有另一种方法,使用原子整数(因此我们可以将其设置为final)循环遍历listB
final AtomicInteger i= new AtomicInteger();
listOfA.forEach( a-> listOfB.get(i.getAndIncrement()).sample = a.sample );
或者迭代器方式
Iterator<ClassB> iter = listOfB.iterator();
listOfA.forEach( a-> iter.next().sample = a.sample );
迭代器iter=listOfB.Iterator();
listOfA.forEach(a->iter.next().sample=a.sample);
Iterator<ClassB> iter = listOfB.iterator();
listOfA.forEach( a-> iter.next().sample = a.sample );