Java等同于Python的切片

时间:2018-11-25 19:12:59

标签: java python java-8 java-stream

如您所知-如果没有,请浏览here-Python的slice :表示法

[1:5] is equivalent to "from 1 to 5" (5 not included)
[1:] is equivalent to "1 to end"
a[-1] last item in the array
a[-2:] last two items in the array
a[:-2] everything except the last two items

我想知道它是通过Java流实现还是以类似于 new 的标准API的其他方式实现,因为有时它确实很有用。

1 个答案:

答案 0 :(得分:1)

您可以按以下方式使用IntStream.range API:

[1:5]相当于“从1到5”(不包括5)

IntStream.range(1, 5).mapToObj(list::get)
            .collect(Collectors.toList());

[1:]等同于“ 1至结束”

IntStream.range(1, list.size()) // 0 not included

a [-1]数组中的最后一项

IntStream.range(list.size() - 1, list.size()) // single item

a [-2:]数组中的最后两项

IntStream.range(list.size() - 2, list.size()) // notice two items

a [:-2]除最后两项外的所有内容

IntStream.range(0, list.size() - 2)

通知 ,这些参数位于上下文range​(int startInclusive, int endExclusive)中。

给出一个整数列表

List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7);

完成以上任何操作以获得切片将类似于指定

List<Integer> slice = IntStream.range(1, 5).mapToObj(list::get)
            .collect(Collectors.toList()); // type 'Integer' could depend on type of list

例如,您还可以使用具有类似结构的另一个API List.subList获得类似的结果

List<Integer> subList = list.subList(1, 5);

以上两者都会输出

[2, 3, 4, 5]