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

问题描述 投票:0回答:4

有没有办法使用简单的 lambda 表达式来初始化数组或集合?

类似的东西

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

或者

// I know, you need to say how many objects
ArrayList<Person> persons = () -> {return new Person()};
java lambda java-8
4个回答
33
投票

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

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));
    }
}

29
投票

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

Arrays.setAll
Arrays.parallelSetAll
:

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);

2
投票

如果您想使用 Java 8 对其进行初始化,则实际上不需要使用 lambda 表达式。您可以使用

Stream
:

来实现这一点
Stream.of(new Person()).collect(Collectors.toList());

0
投票

给定一组人

Person[] persons = new Person[15];

你可以这样做:

IntStream.range(0, 15).forEach(i -> persons[i] = new Person());
© www.soinside.com 2019 - 2024. All rights reserved.