在Java 8中,skip
、limit
、map
和collect
是流(Stream)类的常用方法,用于对集合进行处理和转换。下面我将逐个介绍它们的作用和用法:
-
skip
方法:skip
方法用于跳过流中的前N个元素,并返回一个新的流。它接受一个long
类型的参数,表示要跳过的元素数量。示例代码如下:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
.skip(2)
.collect(Collectors.toList());
// 输出结果为 [3, 4, 5]
在上述示例中,我们创建了一个整数列表numbers
,然后使用stream()
方法将其转换为流。接着使用skip(2)
方法跳过前两个元素,最后使用collect(Collectors.toList())
方法将剩余的元素收集到一个新的列表中。
2. limit
方法:limit
方法用于限制流中元素的数量,并返回一个新的流。它接受一个long
类型的参数,表示要保留的元素数量。示例代码如下:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
.limit(3)
.collect(Collectors.toList());
// 输出结果为 [1, 2, 3]
在上述示例中,我们创建了一个整数列表numbers
,然后使用stream()
方法将其转换为流。接着使用limit(3)
方法保留前三个元素,最后使用collect(Collectors.toList())
方法将这三个元素收集到一个新的列表中。
3. map
方法:map
方法用于将流中的每个元素映射到另一个元素,并返回一个新的流。它接受一个Function
类型的参数,表示要应用于每个元素的映射函数。示例代码如下:
List<String> names = Arrays.asList("John", "Jane", "Tom");
List<Integer> nameLengths = names.stream()
.map(String::length)
.collect(Collectors.toList());
// 输出结果为 [4, 4, 3]
在上述示例中,我们创建了一个字符串列表names
,然后使用stream()
方法将其转换为流。接着使用map(String::length)
方法将每个字符串映射为其长度,最后使用collect(Collectors.toList())
方法将长度收集到一个新的列表中。
4. collect
方法:collect
方法用于将流中的元素收集到一个集合或其他数据结构中。它接受一个Collector
类型的参数,表示收集操作的具体规则。示例代码如下:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Set<Integer> result = numbers.stream()
.collect(Collectors.toSet());
// 输出结果为 [1, 2, 3, 4, 5]
在上述示例中,我们创建了一个整数列表numbers
,然后使用stream()
方法将其转换为流。接着使用collect(Collectors.toSet())
方法将流中的元素收集到一个Set
集合中。
这些方法在Java 8的流操作中非常常用,它们可以帮助我们对集合进行灵活的处理和转换。除了上述介绍的方法,流还提供了许多其他的操作,如过滤、排序等,可以根据具体需求选择使用。