博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Stream常用方法使用案例
阅读量:3946 次
发布时间:2019-05-24

本文共 5195 字,大约阅读时间需要 17 分钟。

一、min()

/**   * min():取流中最小值   */  @Test  void test1(){
List
list = List.of(1,4,2,8,5); Integer num = list.stream().min((o1, o2) -> o1.compareTo(o2)).get(); System.out.println(num); //1 }

二、max()

/**   * max():取流中的最大值   */  @Test  void test2(){
System.out.println(list.stream().max((o1, o2) -> o1.compareTo(o2)).get()); //8 }

三、findFirst()

/**   * FindFirst():取流中的第一个值   */  @Test  void test3(){
List
list = Arrays.asList(1, 4, 2, 8, 5); //获取串行流 Integer num1 = list.stream().findFirst().get(); System.out.println(num1); // 1 //获取并行流 Integer num2 = list.parallelStream().findFirst().get(); System.out.println(num2); // 1 }

四、findAny()

/**   * FindAny():获取流中任何一个数   *   * 在并行流中,findany()返回的是处理的最快的线程的数据,并行流适用于对于顺序没有严格要求的操作   */  @Test  void test4() {
List
list = Arrays.asList(1, 4, 2, 8, 5); //获取串行流 Integer num1 = list.stream().findAny().get(); System.out.println(num1); // 1 //获取并行流 Integer num2 = list.parallelStream().findAny().get(); System.out.println(num2); // 2 }

五、map()

@Data  @AllArgsConstructor  @NoArgsConstructor  static class User {
private String name; private Integer age; } /** * map():调用此方法可以改变返回的类型 */ @Test void test5() {
/** * 将asList中的数据由字符串修改为int */ List
asList = Arrays.asList("1", "2", "5", "4"); asList.stream().map(str -> Integer.parseInt(str)).forEach(str -> {
System.out.println(str); System.out.println(str.getClass()); }); /** * 将list中的对象的中name打印出来 */ List
list = List.of(new User("张三", 13), new User("李四", 36), new User("王五", 12)); list.stream().map(user -> user.getName()).forEach(name -> {
System.out.println(name); }); }

六、filter()

/**   * filter():对流进行过滤   */  @Test  void tst6() {
/** * 将年龄大于等于13的用户的名字打印出来 */ List
list = List.of(new User("张三", 13), new User("李四", 36), new User("王五", 12)); list.stream().filter(user -> user.getAge() >= 13).forEach(user -> {
System.out.println(user.getName());//张三、李四 }); }

七、flatMap()

/**   * flatMap():把两个流改变为一个流   */  @Test  void tst7() {
List
stringList = new ArrayList<>(); stringList.add("aa"); stringList.add("bb"); stringList.add("cc"); stringList.stream().map(str -> str.split("")).flatMap(st -> Arrays.stream(st)).forEach(System.out::print); //aabbcc }

八、anyMatch()

/**   * anyMatch():判断条件中,任意一个匹配,则返回true   */  @Test  void tst() {
List
a = List.of("a", "a", "a"); List
b = List.of("a", "a", "a","b"); boolean mark1 = a.stream().anyMatch(o -> o.equals("a")); System.out.println(mark1); //true boolean mark2= b.stream().anyMatch(o -> o.equals("a")); System.out.println(mark2); //true }

九、allMatch()

/**   * allMatch():判断条件中,所有元素匹配才返回true   */  @Test  void tst9() {
List
a = List.of("a", "a", "a"); List
b = List.of("a", "a", "a", "b"); boolean mark1 = a.stream().allMatch(o -> o.equals("a")); boolean mark2 = b.stream().allMatch(o -> o.equals("a")); System.out.println("mark1:" + mark1 + "----mark2:" + mark2);//mark1:true----mark2:false }

十、nonMatch()

/**   * nonMatch():判断条件都不满足,则返回true   */  @Test  void tst10(){
List
b = List.of("a", "a", "a", "b"); boolean mark = b.stream().noneMatch(o -> o.equals("c")); System.out.println(mark);//true }

十一、sorted()

/**   * sorted():排序   */  @Test  void tst11() {
List
users = new ArrayList<>(); users.add(new User("张三", 12)); users.add(new User("李四", 15)); users.add(new User("王五", 13)); //升序: Stream
sorted1 = users.stream().sorted(Comparator.comparingInt(User::getAge)); sorted1.forEach(System.out::println); System.out.println("-------------"); //降序: Stream
sorted2 = users.stream().sorted(Comparator.comparingInt(User::getAge).reversed()); sorted2.forEach(System.out::println); }

十二、peek()

/**   * peek():对对象的属性进行操作   */  @Test  void tst12() {
List
users = new ArrayList<>(); users.add(new User("张三", 12)); users.add(new User("李四", 15)); users.add(new User("王五", 13)); //对年龄大于12的用户在原基础上年龄再加5 List
userList = users.stream().filter(o -> o.getAge() > 12).peek(user -> {
user.setAge(user.getAge() + 5); }).collect(Collectors.toList()); System.out.println(userList); //[DemoApplicationTests.User(name=李四, age=20), DemoApplicationTests.User(name=王五, age=18)] }

十三、limit()、skip()

/**   * limit():截取,skip():跳过   */  @Test  void tst13(){
//从1开始自增无线迭代,跳过前5个数,截取10个数 Stream.iterate(1,x->++x).skip(5).limit(10).forEach(System.out::print); }//6789101112131415

十四、reduce()

/**   * reduce():Stream的一个聚合方法,它可以把一个Stream的所有元素按照聚合函数聚合成一个结果。   */  @Test  void tst14(){
List
list = Stream.iterate(1, x -> ++x).limit(10).collect(Collectors.toList()); //计算list里面的元素的总和 Integer reduce = list.stream().reduce(0, (a, b) -> a + b); System.out.println(reduce); //传统计算list元素总和方法 int a=0; for (Integer integer : list) {
a += integer; } System.out.println(a); }

转载地址:http://bvhwi.baihongyu.com/

你可能感兴趣的文章
Abstracting the New APIs 抽象出新的API
查看>>
Proxying to the New APIs 代理新的API
查看>>
Creating an Implementation with Older APIs 用较早版本的APIs实现抽象类
查看>>
Using the Version-Aware Component 使用版本识别组件
查看>>
Enhancing Security with Device Management Policies 加强安全与设备管理策略 Developing for Enterprise
查看>>
Advertising without Compromising User Experience 不降低用户体验的广告
查看>>
Planning Screens and Their Relationships 规划屏幕和它们的关系
查看>>
Planning for Multiple Touchscreen Sizes 规划多个触摸屏尺寸
查看>>
Providing Descendant and Lateral Navigation 提供下一代和横向导航
查看>>
GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG解释 + 数据解析
查看>>
android如何使得电阻屏在第一次开机时自动叫起屏幕校准程序
查看>>
android如何实现:当开启图案解锁时,取消滑动解锁
查看>>
Providing Ancestral and Temporal Navigation 设计高效的应用导航
查看>>
Putting it All Together: Wireframing the Example App 把APP例子用线框图圈起来
查看>>
Implementing Lateral Navigation 实现横向导航
查看>>
Implementing Ancestral Navigation 实现原始导航
查看>>
Implementing Temporal Navigation 实现时间导航
查看>>
Responding to Touch Events 响应触摸事件
查看>>
Defining and Launching the Query 定义和启动查询
查看>>
Handling the Results 处理结果
查看>>