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 }
原文:https://www.cnblogs.com/mingmingn/p/13074051.html