Java 8 - 初始化列表(列表)

时间:2015-10-02 11:55:39

标签: java java-8 java-stream

我有一个关于Java 8和Lists的问题。是否可以比下面的代码更容易初始化List?

final List<List<ScheduleIntervalContainer>> weekScheduler = new ArrayList<>();

weekScheduler.add(0, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(1, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(2, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(3, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(4, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(5, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(6, new ArrayList<ScheduleIntervalContainer>());

4 个答案:

答案 0 :(得分:10)

就个人而言,我只想使用for循环:

List<List<ScheduleIntervalContainer>> weekScheduler = new ArrayList<>();
for (int i = 0; i < 7; i++)
    weekScheduler.add(new ArrayList<>());

但是,如果您需要Java 8解决方案:

List<List<ScheduleIntervalContainer>> weekScheduler 
        = Stream.generate(ArrayList<ScheduleIntervalContainer>::new)
                .limit(7)
                .collect(Collectors.toList());

答案 1 :(得分:7)

您可以使用:

List<List<ScheduleIntervalContainer>> weekScheduler = 
     IntStream.rangeClosed(0, 6).mapToObj(i -> new ArrayList<ScheduleIntervalContainer>())
                                .collect(Collectors.toList());

这将创建一个从{0到6(包含)的int值的流,将每个整数映射到您班级的新ArrayList并将结果收集到{{1} }。

答案 2 :(得分:2)

您可以使用循环或IntStream。

final List<List<ScheduleIntervalContainer>> weekScheduler = new ArrayList<>();
IntStream.range(0, 7).forEach(day -> weekScheduler.add(new ArrayList<>()));

答案 3 :(得分:0)

每当我使用列表编码时,我都会使用for循环来加速声明。在你的情况下,我会强烈建议任何类型的循环,但for循环可能是最简单的。