使用lambda创建一个包含空对象的ArrayList

时间:2017-03-04 22:43:32

标签: java arraylist lambda java-8 java-stream

我想使用流创建一个具有id和空列表的对象的ArrayList。我尝试了不同的方法,但没有接缝工作。如果有人可以给我一些点击将帮助我很多。 这是我想要转换为Java 8的代码:

import inspect

def build_sig(arg_tuple):
    return inspect.Signature(parameters = [inspect.Parameter(
        name=name, kind=inspect.Parameter.POSITIONAL_OR_KEYWORD, 
        default=default) for name, default in arg_tuple])

def wrap(f, arg_tuple):
    sig = build_sig(arg_tuple)
    def g(*args, **kwds):
        bound = sig.bind(*args, **kwds)
        bound.apply_defaults()
        return f(**bound.arguments)
    g.__signature__ = sig
    return g

def f(*args, **kwds):
    return(args, kwds)

g = wrap(f, (['a', 1], ['b', 7]))

print(inspect.getargspec(g))
print(g(3))

# ArgSpec(args=['a', 'b'], varargs=None, keywords=None, defaults=(1, 7))
# ((), {'a': 3, 'b': 7})

提前谢谢。

2 个答案:

答案 0 :(得分:3)

您可以考虑向Supplier添加一个构造函数,该构造函数将id作为参数,并初始化材料列表,因此您不必公开setter。然后使用循环或流的解决方案变得更加简单。

public void buildSuppliersWithLoop()
{
    ArrayList<Supplier> registers = new ArrayList<>()
    int numberOfSuppliers = 100;
    for (int i = 0; i < numberOfSuppliers; i++)
    {
        registers.add(new Supplier(i));
    }
}

public void buildSuppliersWithStream()
{
    int numberOfSuppliers = 100;
    List<Supplier> registers = IntStream.range(0, numberOfSuppliers)
            .mapToObj(Supplier::new)
            .collect(Collectors.toList());
}

public class Supplier
{
    private int number;
    private List<Warehouse> materials;

    public Supplier(int number)
    {
        this.number = number;
        this.materials = new ArrayList<>();
    }
}

public class Warehouse
{
}

答案 1 :(得分:2)

这不是我的首选方法(我认为for循环在这里很好),但在流中你可以这样做:

viewDidLoad