栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaSE——StreamAPI

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaSE——StreamAPI

文章目录

获取流

集合.stream()    集合.parallelStream()Arrays.stream(...)Stream.of(...)Stream.iterate(...).limit(...).forEach(...)Stream.generate(...).limit(...).forEach(...) 操作流

筛选切片映射排序 生成结果

判断获取迭代转换收集

获取流 集合.stream()    集合.parallelStream()

Collection的方法,可以由集合获取流。

List list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

Stream stream = list.stream();
stream.forEach(System.out::println);

parallelStream是多个线程同时操作。

Arrays.stream(…)

由数组获取流。

String[] arr = {"A", "B", "C"};

Stream stream = Arrays.stream(arr);
stream.forEach(System.out::println);
Stream.of(…)

由一些数据获取流

Stream stream = Stream.of("A", "B", "C");
stream.forEach(System.out::println);
Stream.iterate(…).limit(…).forEach(…)

迭代产生无限流

Stream.iterate(1, x -> x + 1)
		.limit(10)
		.forEach(System.out::println);
Stream.generate(…).limit(…).forEach(…)

生成器产生无限流

Stream.generate(() -> new Random().nextInt(10))
		.limit(10)
		.forEach(System.out::println);
操作流 筛选切片

排除:filter

按条件筛选元素

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.filter(x -> x >= 5)
		.forEach(System.out::println);

截断:limit

限制数量,超过的部分舍弃。

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.forEach(System.out::println);

跳过:skip

去除前面一些元素。

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.skip(10)
		.forEach(System.out::println);

去重:distinct

去除重复的元素

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.distinct()
		.forEach(System.out::println);
映射

加工:map

对每个元素进行一次加工,可以得到新的元素流

@Test
public void fun1() {
	Stream.generate(() -> new Random().nextInt(10))
			.limit(20)
			.map(x -> new Integer[]{x, x + 1, x + 2})
			.forEach(HelloTest::showArray);
}

public static void showArray(Integer[] arr) {
	System.out.print("[");
	for (int i = 0; i < arr.length; i++) {
		System.out.print(arr[i]);
		if (i != arr.length - 1) {
			System.out.print(",");
		}
	}
	System.out.println("]");
}

流中流:flatmap

专用于元素是集合的情况,会对其中的元素进行加工,得到新的元素流。

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.map(x -> new Integer[]{x, x + 1, x + 2})
		.flatMap(Stream::of)
		.forEach(System.out::println);
排序

简单排序

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.sorted()
		.forEach(System.out::println);

自定义排序

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.sorted((x, y) -> y - x)
		.forEach(System.out::println);
生成结果 判断

是否全部符合

boolean b = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.allMatch(x -> x < 9);

System.out.println(b);

是否有符合的

boolean b = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.anyMatch(x -> x < 9);

System.out.println(b);

是否没有符合的

boolean b = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.noneMatch(x -> x < 9);

System.out.println(b);
获取

第一个元素

Optional first = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.findFirst();

System.out.println(first.get());

随机的一个元素

Optional first = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.findAny();

System.out.println(first.get());

总数量

long count = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.count();

System.out.println(count);

最大值

Optional min = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.max((x, y) -> x - y);

System.out.println(min.get());

最小值

Optional min = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.min((x, y) -> x - y);

System.out.println(min.get());
迭代

遍历所有元素

Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.forEach(System.out::println);
转换

所有值合起来变成一个值

Integer reduce = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.reduce(0, (x, y) -> x + y);

System.out.println(reduce);
收集

所有值合起来变成一个集合

List s = Stream.generate(() -> new Random().nextInt(10))
		.limit(20)
		.collect(Collectors.toList());

System.out.println(s);

Collectors常用接口

toList	转List
toSet	转Set
toCollection(HashSet::new)	转Set
counting()	计算数量
averagingDouble	平均值
summingDouble	求和
maxBy	最大值
minBy	最小值
groupingBy	分组Map
partitioningBy	分组
joining	字符串拼接
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号