Java 8-如何从另一个列表中的对象设置列表中的对象? [英] Java 8 - How to set an object in a list from an object in another list?

查看:89
本文介绍了Java 8-如何从另一个列表中的对象设置列表中的对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想了解如何将对象从列表复制/分配到另一个列表?

I want to understand how can I copy/assign an object from a list to another list ?

例如: ClassA 具有一个对象 Sample ,而 ClassB 也具有一个对象 Sample (如下面的示例所示,这两个类中的其他数据成员都不同).

For example : ClassA has an object of class Sample and ClassB also has an object of class Sample (other data members are different in both the classes as you can see in the example below).

我有 ClassA ClassB 的列表.

现在,如果我想在 List< List的每个元素中设置类 Sample 的对象. ClassB> ,其值来自 List< ClassA> ,如何在Java中使用 Functional Style 来做到这一点?

Now if I want to set the object of class Sample in each element of List< ClassB > with the value of the Sample object from List< ClassA >, how can I do this using Functional Style in Java ?

我已经展示了如何通过 Imperative Style 来实现,但是我真的想在这里使用 streams .

I have shown how it can be done by Imperative Style but I really want to use streams here.

假设: 列表< ClassA> List< ClassB> 相等

这些是我的课程:

示例:

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 + "]";
    }
}

ClassA:

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 + "]";
    }
}

ClassB:

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]]]

推荐答案

您可以使用

You can do it using IntStream in functional way but honestly both are same

IntStream.range(0, listOfB.size())
         .forEach(i -> listOfB.get(i).sample = listOfA.get(i).sample);

这篇关于Java 8-如何从另一个列表中的对象设置列表中的对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆