目录
1-2.数组可以通过Arrays.stream静态方法来创建
前言
在学习新的知识总是容易忘记,遂写此篇,一为加深印象,二为他日复习,三曰助人为乐。
此文有参靠过部分作者的写作框架,如有侵权请留言,吾必改。
提示:以下是本篇文章正文内容,下面案例可供参考
一、StreamAPI?
JAVA8中一个重要概念就是流——stream。
二、使用步骤
1.创建
1-1.由Collection直接创建
Collection接口及其被继承的List、Set、Queue、Stack等类/接口的实体可以直接创建Stream。
代码如下(示例):
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
Map<String, String> map = new HashMap<>();
Stream<Entry<String, String>> stream = map.entrySet().stream();
1-2.数组可以通过Arrays.stream静态方法来创建
代码如下(示例):
String[] arr = new String[5];
Stream<String> steam = Arrays.stream(arrays);
1-3.通过Stream.of静态方法创建
例如:
Stream<String> stream = Stream.of("a", "b", "c");
1-4.通过Stream.iterate方法生成无限流
例如:
Stream<Integer> stream = Stream.iterate(0, x -> x + 2); // 生成所有的非负偶数流
1-5.通过Stream.generate方法生成无限流
例如:
Stream<Double> stream = Stream.generate(() -> Math.random()); // 生成无限多项的随机数流
2.中间处理
所有的中间处理都是惰性的,并不会即时执行。
2-1.过滤(filter)
接受lambda,从流中排除某些元素(过滤)。
例如:
Stream<Integer> stream = Stream.of(4,5,6,3,-1,-2);
Stream.filter(value -> value > 0).forEach(System.out::print);
输出为: 456
2-2.截断(limit)
保留流中的前n个元素。可提升处理速度。
例如:
@Test
void test01(){
Stream<Integer> stream = Stream.iterate(0, x -> x + 2);
stream.limit(5).forEach(System.out::print);
}
输出为: 02468
2-3.舍弃(skip)
舍弃流中的前n个元素
例如
@Test
void test01(){
Stream<Integer> stream = Stream.iterate(0, x -> x + 2);
stream.limit(5).skip(3).forEach(System.out::print);
}
输出为:68
2-4.去重(distinct)
通过流所生成元素的hashCode()和equals()去除重复元素。
例如
@Test
void test02(){
Stream<Integer> stream = Stream.of(1,2,2,2,3,4,5);
stream.distinct().forEach(System.out::print);
}
输出为: 12345
2-5.排序 (sorted)
对Stream流中的元素进行排序
例如
@Test
void test02(){
Stream<Integer> stream = Stream.of(1,3,2,5,4);
stream.sorted().forEach(System.out::print);
}
输出为: 12345
2-6.映射(map)
通过lambda表达式,将每个元素加工成新元素.
@Test
void test03(){
Stream.of(1,3,5,2,4).map(value -> String.format("我是第%d 名",value)).forEach(System.out::println);
}
输出为:
我是第1名
我是第3名
我是第5名
我是第2名
我是第4名