Java 用于初始化数组的Lambda表达式
有没有一种方法可以通过使用简单的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表达式。您可以通过以下方式实现:
// 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);