Java Stream limit()方法示例

x33g5p2x  于2022-09-24 转载在 Java  
字(2.2k)|赞(0)|评价(0)|浏览(197)

Streamlimit 方法返回一个新流,该流包含该流的元素,该流被截断为给定的最大长度。 limit 方法由前 n 个元素组成,其中 n 小于或等于给定的最大大小。
从 Java 文档中找到 limit 方法声明。

Stream<T> limit(long maxSize)

参数 maxSizelimit 返回的流中的最大元素数。
limit 方法返回新的 Stream
如果参数 maxSize 为 -ve,该方法将抛出 IllegalArgumentException

limit 方法是一种短路有状态的中间操作
流操作分为中间操作和终端操作,组合起来形成流管道。如果中间操作可以为无限输入产生有限流,则它是短路操作。中间操作分为无状态操作和有状态操作。在处理诸如 filtermap 之类的新元素时,无状态操作不会保留先前看到的元素的状态。在处理 distinctlimit 等新元素时,有状态操作可能会合并来自先前看到的元素的状态。

注意:limit 方法在顺序流管道上是一种廉价的操作,对于有序的并行管道来说可能很昂贵,尤其是对于较大的 maxSize 值。这是因为 limit(maxSize) 必然会以遇到的顺序返回第一个 maxSize 元素,而不是 maxSize 数字的任何元素。

现在我们将讨论 limit 方法示例。

示例 1
假设我们有一个数字流,并且我们正在对它调用 limit 方法。

Stream.of(11, 12, 13, 14, 15).limit(3)
   .forEach(s->System.out.println(s));

源流有 5 个数字,我们调用了最大大小为 3 的 limit(3)。因此,我们的输出将从第一个元素开始最多为 3 个元素,即 11 12 13。

如果 limit 的最大尺寸大于元素个数,则流的所有元素将被 limit 方法选择。找到下面的代码。

Stream.of("A", "B", "C", "D").limit(10)
   .forEach(s->System.out.println(s));

我们可以看到源流有 4 个元素,而我们正在调用最大大小为 10 的 limit。这里 limit 将返回包含所有元素的流,输出将为 A B C D。

示例 2
查找 limit 方法的更多示例。
LimitDemo2.java

package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class LimitDemo2 {
  public static void main(String[] args) {
	System.out.println("--- code 1 ---");    
	List<String> list = Arrays.asList("Vijay", "Suresh", "Vinod");
	list.stream()
	  .map(e -> "Mr. " + e)
	  .limit(2)
	  .forEach(s->System.out.printf("%s ", s));

	System.out.println("\n--- code 2 ---");
	List<Integer> numList = Arrays.asList(31, 32, 33, 34);
	numList.stream()
	  .mapToInt(i -> i * 10)
	  .limit(3)
	  .forEach(s->System.out.printf("%s ", s));
  }
}

输出

--- code 1 ---
Mr. Vijay Mr. Suresh 
--- code 2 ---
310 320 330

示例 3
查找具有并行流的 limit 方法的示例。
LimitDemo3.java

package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class LimitDemo3 {
  public static void main(String[] args) {
	System.out.println("--- code 1 ---");    
	List<String> list = Arrays.asList("Varanasi", "Madurai", "Agartala");
	list.parallelStream()
	  .limit(2)
	  .forEach(s->System.out.printf("%s ", s));

	System.out.println("\n--- code 2 ---");
	List<Integer> numList = Arrays.asList(41, 42, 43, 44);
	numList.parallelStream()
	  .mapToInt(i -> i * 10)
	  .limit(3)
	  .forEach(s->System.out.printf("%s ", s));
  }
}

输出

--- code 1 ---
Madurai Varanasi 
--- code 2 ---
420 410 430

相关文章

微信公众号

最新文章

更多