我有一个关于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>());
答案 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循环可能是最简单的。