我对使用来自 Java 8 的新流 API 的代码设计没有什么问题。我想学习新事物,其中一项任务是:
拒绝列表中的最大值和最小值。列表不包含重复项。
看起来很简单?不...我的代码:
List<Integer> ranges = Lists.newArrayList(new Range(1, 15));
List<Integer> collect = ranges.stream()
.filter(x -> x != ranges.stream()
.mapToInt(Integer::intValue)
.max()
.getAsInt())
.filter(x -> x != ranges.stream()
.mapToInt(Integer::intValue)
.min()
.getAsInt())
.collect(Collectors.toList());
assertThat(collect).hasSize(13); // OK
assertThat(collect).isEqualTo(Lists.newArrayList(new Range(2,14))); // OK
这段代码很好(如果我们没有 min/max 的重复,但这不是这里的核心问题)但问题是我在这里使用了三个流。第一个是主流,第二个是删除最大值,第三个是删除最小值。有没有可能在一个流中完成这项任务?
//编辑:非常原始的 Scala 版本:
val list = List.range(1, 15).sortWith(_>_).tail.reverse.tail
有额外的排序,因为我们可以有 shuiffed 列表。