我想浏览文件列表,并在每个步骤中仅获得一个验证子集和一个训练子集。

在Java中,我可以使用List#sublist(int from, int to)来获取子列表,但是是否有一种简便的方法来获取除该范围内的元素以外的所有元素?例如。

List<File> valid = this.sampleFiles.subList(fromIndex, toIndex);
List<File> train = this.sampleFiles.notInSubList(fromIndex, toIndex);

最佳答案

也许Stream APICollectors.partitioningBy可以帮助您。这样,您便可以按照自己的意愿获得包含分区的地图。

sampleFiles.stream()
           .collect(Collectors.partitioningBy(/* your partition function */);


在上面的示例中,您将获得一个Map<Boolean, List<File>>。但是其他分区也是可能的。也许IntStream.range也可以。

如果您不喜欢流,则以下方法也可以工作...

List<String> sampleFiles = ...
List<String> valid = sampleFiles.subList(fromIndex, toIndex);
List<String> train = new ArrayList(sampleFiles);
train.removeAll(valid);


我认为,除了这些变体之外,没有其他更简单的方法来获取列表的其余部分。

10-07 19:37
查看更多