首页 > 其他 > 详细

5-常用流的中间操作

时间:2020-06-09 17:52:48      阅读:47      评论:0      收藏:0      [点我收藏+]

常用流的中间操作

filter使用:过滤掉不符合断言判断的数据
map使用:将一个元素转换成另一个元素
flatMap使用:将一个对象转换成流
peek使用:遍历操作
sorted使用:排序
distinct使用:去重
skip使用:跳过前几条
limit使用:取限制条数数据
  1 import com.alibaba.fastjson.JSON;
  2 import org.junit.Before;
  3 import org.junit.Test;
  4 
  5 import java.util.ArrayList;
  6 import java.util.Arrays;
  7 import java.util.Comparator;
  8 import java.util.List;
  9 
 10 /**
 11  * @description: 演示流的各种中间操作
 12  */
 13 public class StreamOperator {
 14 
 15     static class Student{
 16         private String name;
 17         private Integer age;
 18 
 19         Student(String name, Integer age){
 20             this.name = name;
 21             this.age = age;
 22         }
 23 
 24         public String getName() {
 25             return name;
 26         }
 27 
 28         public void setName(String name) {
 29             this.name = name;
 30         }
 31 
 32         public Integer getAge() {
 33             return age;
 34         }
 35 
 36         public void setAge(Integer age) {
 37             this.age = age;
 38         }
 39     }
 40 
 41     List<Student> list;
 42 
 43     @Before
 44     public void init(){
 45         /**
 46          * 该写法有内存泄漏风险,不要在生产使用
 47          */
 48         list = new ArrayList<Student>(){
 49             {
 50                 add(new Student("小明", 22));
 51                 add(new Student("小黄", 20));
 52                 add(new Student("小红", 21));
 53                 add(new Student("小超", 25));
 54                 add(new Student("小王", 20));
 55             }
 56         };
 57     }
 58 
 59     /**
 60      * filter使用:过滤掉不符合断言判断的数据
 61      */
 62     @Test
 63     public void filterTest(){
 64         list.stream()
 65                 .filter(student -> student.getAge() > 20)
 66                 .forEach(item ->
 67                         System.out.println(
 68                                 JSON.toJSONString(item, true)
 69                         ));
 70         //{
 71         //    "age":22,
 72         //    "name":"小明"
 73         //}
 74         //{
 75         //    "age":21,
 76         //    "name":"小红"
 77         //}
 78         //{
 79         //    "age":25,
 80         //    "name":"小超"
 81         //}
 82     }
 83 
 84     /**
 85      * map使用:将一个元素转换成另一个元素
 86      */
 87     @Test
 88     public void mapTest(){
 89         list.stream()
 90                 .map(student -> student.getName())
 91                 .forEach(item ->
 92                         System.out.print(
 93                                 JSON.toJSONString(item, true)
 94                         ));
 95         //"小明""小黄""小红""小超""小王"
 96     }
 97 
 98     /**
 99      * flatMap使用:将一个对象转换成流
100      */
101     @Test
102     public void flatMapTest(){
103         list.stream()
104                 .flatMap(student -> Arrays.stream(
105                         student.getName().split("")
106                 ))
107                 .forEach(item ->
108                         System.out.print(
109                                 JSON.toJSONString(item, true)
110                         ));
111         //"小""明""小""黄""小""红""小""超""小""王"
112     }
113 
114     /**
115      * peek使用:遍历操作
116      * 注意:此时peek和forEach是交替打印的
117      */
118     @Test
119     public void peekTest(){
120         list.stream()
121                 .peek(student -> System.out.println(student.getName()))
122                 .forEach(item ->
123                         System.out.println(
124                                 JSON.toJSONString(item, true)
125                         ));
126         //小明
127         //{
128         //    "age":22,
129         //    "name":"小明"
130         //}
131         //小黄
132         //{
133         //    "age":20,
134         //    "name":"小黄"
135         //}
136         //小红
137         //{
138         //    "age":21,
139         //    "name":"小红"
140         //}
141         //小超
142         //{
143         //    "age":25,
144         //    "name":"小超"
145         //}
146         //小王
147         //{
148         //    "age":20,
149         //    "name":"小王"
150         //}
151     }
152 
153     /**
154      * sorted使用:排序
155      * 注意:添加有状态的sorted操作后,peek和forEach分开打印
156      */
157     @Test
158     public void sortTest(){
159         list.stream()
160                 .peek(student -> System.out.println(student.getName()))
161                 .sorted(Comparator.comparing(Student::getAge))
162                 .forEach(item ->
163                         System.out.println(
164                                 JSON.toJSONString(item, true)
165                         ));
166         //小明
167         //小黄
168         //小红
169         //小超
170         //小王
171         //{
172         //    "age":20,
173         //    "name":"小黄"
174         //}
175         //{
176         //    "age":20,
177         //    "name":"小王"
178         //}
179         //{
180         //    "age":21,
181         //    "name":"小红"
182         //}
183         //{
184         //    "age":22,
185         //    "name":"小明"
186         //}
187         //{
188         //    "age":25,
189         //    "name":"小超"
190         //}
191     }
192 
193     /**
194      * distinct使用:去重
195      */
196     @Test
197     public void distinctTest(){
198         list.stream()
199                 .map(student -> student.getAge())
200                 .distinct()
201                 .forEach(item ->
202                         System.out.print(
203                                 JSON.toJSONString(item, true) + " "
204                         ));
205         //22 20 21 25
206     }
207 
208     /**
209      * skip使用:跳过前几条
210      */
211     @Test
212     public void skipTest(){
213         list.stream()
214                 .sorted(Comparator.comparing(Student::getAge))
215                 .skip(2)
216                 .forEach(item ->
217                         System.out.println(
218                                 JSON.toJSONString(item, true)
219                         ));
220         //{
221         //    "age":21,
222         //    "name":"小红"
223         //}
224         //{
225         //    "age":22,
226         //    "name":"小明"
227         //}
228         //{
229         //    "age":25,
230         //    "name":"小超"
231         //}
232     }
233 
234     /**
235      * limit使用:取限制条数数据
236      * skip和limit可以实现伪分页
237      */
238     @Test
239     public void limitTest(){
240         list.stream()
241                 .sorted(Comparator.comparing(Student::getAge))
242                 .limit(3)
243                 .forEach(item ->
244                         System.out.println(
245                                 JSON.toJSONString(item, true)
246                         ));
247         //{
248         //    "age":20,
249         //    "name":"小黄"
250         //}
251         //{
252         //    "age":20,
253         //    "name":"小王"
254         //}
255         //{
256         //    "age":21,
257         //    "name":"小红"
258         //}
259     }
260 }

 

5-常用流的中间操作

原文:https://www.cnblogs.com/mingmingn/p/13074051.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!