Java 用于初始化数组的Lambda表达式

Java 用于初始化数组的Lambda表达式,java,lambda,java-8,Java,Lambda,Java 8,有没有一种方法可以通过使用简单的lambda表达式来初始化数组或集合 差不多 // What about this? Person[] persons = new Person[15]; persons = () -> {return new Person()}; 或 //我知道,你需要说有多少个对象 ArrayList persons=()->{return new Person()}; 如果要使用Java 8对其进行初始化,实际上不需要使用lambda表达式。您可以通过以下方式实现:

有没有一种方法可以通过使用简单的lambda表达式来初始化数组或集合

差不多

// What about this?
Person[] persons = new Person[15];
persons = () -> {return new Person()};

//我知道,你需要说有多少个对象
ArrayList persons=()->{return new Person()};

如果要使用Java 8对其进行初始化,实际上不需要使用lambda表达式。您可以通过以下方式实现:


当然-我不知道它有多有用,但它肯定是可行的:

import java.util.*;
import java.util.function.*;
import java.util.stream.*;

public class Test
{
    public static void main(String[] args)
    {
        Supplier<Test> supplier = () -> new Test();
        List<Test> list = Stream
            .generate(supplier)
            .limit(10)
            .collect(Collectors.toList());
        System.out.println(list.size()); // 10
        // Prints false, showing it really is calling the supplier
        // once per iteration.
        System.out.println(list.get(0) == list.get(1));
    }
}
import java.util.*;
导入java.util.function.*;
导入java.util.stream.*;
公开课考试
{
公共静态void main(字符串[]args)
{
供应商=()->新测试();
列表=流
.生成(供应商)
.限额(10)
.collect(Collectors.toList());
System.out.println(list.size());//10
//打印错误,表明它确实在呼叫供应商
//每次迭代一次。
System.out.println(list.get(0)=list.get(1));
}
}

如果您已经有一个预分配的数组,您可以使用lambda表达式来填充它,或者:

要创建新数组,可以使用

Person[] persons = IntStream.range(0, 15)  // 15 is the size
    .mapToObj(i -> new Person())
    .toArray(Person[]::new);

我认为OP想多次调用lambda表达式来填充列表-看看我的答案对您是否有意义。@JonSkeet完全有意义。这将创建一个包含单个
Person
实例的列表,因此,这是一种复杂的方法,与
Collections.singletonList(new Person())相同
@Holger singletonList返回一个不可变的列表。@Jean-FrançoisSavard:
收集器。toList()不保证可变性或不可变性,因此这并不是支持这个答案的关键。或者直接。生成(()->new Test()),只是为了使用OP请求的lambda运算符。。。更愿意使用.generate(Test::new)。@Jean-FrançoisSavard:是的,我只是将声明分离出来以显示所涉及的类型。
import java.util.*;
import java.util.function.*;
import java.util.stream.*;

public class Test
{
    public static void main(String[] args)
    {
        Supplier<Test> supplier = () -> new Test();
        List<Test> list = Stream
            .generate(supplier)
            .limit(10)
            .collect(Collectors.toList());
        System.out.println(list.size()); // 10
        // Prints false, showing it really is calling the supplier
        // once per iteration.
        System.out.println(list.get(0) == list.get(1));
    }
}
Arrays.setAll(persons, i -> new Person()); // i is the array index
Person[] persons = IntStream.range(0, 15)  // 15 is the size
    .mapToObj(i -> new Person())
    .toArray(Person[]::new);