当前位置: 首页 > news >正文

JavaSe—Stream流☆

目录

1、认识Stream流

stream流的使用步骤

2、步骤1:获取stream流

3、步骤2:Stream流常用的方法

4、步骤3:Stream流的终极方法

5、收集Stream流


1、认识Stream流

  • streamjdk8开始新增的一套API(java.util.stream.*),可以用于操作集合或者数组的数据

一些集合或者数组都有相应的方法进行操作数据为什么还要使用stream流呢?stream有什么优势呢?

  • 优势:Stream流大量的结合了Lambda的语法风格编程,功能强大,性能高效,代码简洁,可读性好

体验Stream流

上面需求的代码实现,使用了传统的方法和Stream流两种方法:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class Demo3Stream {public static void main(String[] args) {//目标:认识stream 流,掌握stream 的基本使用,体会它的好处List<String> list = new ArrayList<>();  //创建数组列表list.add("张三");list.add("张三丰");list.add("熊大");list.add("赵敏");list.add("张无忌");list.add("张翠山");list.add("光头强");list.add("小龙女");//1、现在要将所有以张开头且3字符的元素,存储到一个新集合//方式1、使用传统方案//startsWith 判断字符串开头前缀List<String> list2 = new ArrayList<>();for (String s : list) {if(s.startsWith("张") && s.length() == 3){list2.add(s);}}System.out.println(list2);//方式2、使用 stream流System.out.println(list.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).collect(Collectors.toList()));}
}
/*
[张三丰, 张无忌, 张翠山]
[张三丰, 张无忌, 张翠山]*/

stream流的使用步骤

2、步骤1:获取stream流

  • 获取集合的stream流。
import java.util.*;
import java.util.stream.IntStream;
import java.util.stream.Stream;public class StreamDemo2 {public static void main(String[] args) { //获取stream流//1、获取集合的stream流Collection<String> list = new ArrayList<>();Stream<String> streamList =list.stream(); //获取集合的stream流//2、获取Map集合的stream流Map<String, String> map = new HashMap<>();//map.stream(); //报错//获得Map集合键的stream流Stream<String> keyStream= map.keySet().stream();//获取Map值的stream流Stream<String > valuesStream =  map.values().stream();//获取键值对的stream流Stream<Map.Entry<String, String>> EntryStream = map.entrySet().stream();//3、获取数数组的stream流String[] arr = {"张三", "李四", "王五"};//方法1、Stream<String> streamArr = Arrays.stream(arr);  ////方法2、Stream<String> streamArr2 = Stream.of(arr);Stream<String> streamArr3 = Stream.of("张三", "李四", "王五"); //这里可以传入多个参数}
}

3、步骤2:Stream流常用的方法

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class Demo4Stream {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("熊大");list.add("张三丰");list.add("张无忌");list.add("张翠山");//对流中的数据进行过滤,只保留姓张的Stream<String> streamlist = list.stream().filter(s -> s.startsWith("张"));streamlist.forEach(System.out::println);//sorted 排序对元素进行排序List<Double> list2 = new ArrayList<>();list2.add(4.1);list2.add(2.1);list2.add(3.1);list2.add(1.1);list2.add(1.1);list2.add(1.1);System.out.println("——————————排序——————————");Stream<Double> streamsorted = list2.stream().sorted();streamsorted.forEach(System.out::println); //1.1 2.1 3.1 4.1System.out.println("———————————自定义排序———————————");Stream<Double> stream2 = list2.stream().sorted((d1,d2)->d2.compareTo(d1));stream2.forEach(System.out::println);System.out.println("——————————————谋取前几个元素————————————————");Stream<Double> stream3 = list2.stream().sorted().limit(2);stream3.forEach(System.out::println);System.out.println("——————————————————跳过前几个元素—————————————————————");Stream<Double> stream4 = list2.stream().sorted().skip(2);stream4.forEach(System.out::println);System.out.println("_______________________去重____________________");Stream<Double> stream5 = list2.stream().distinct();stream5.forEach(System.out::println);System.out.println("_____________________映射_____________________");Stream<Double> stream6 = list2.stream().map(d -> d * 2).distinct();stream6.forEach(System.out::println);System.out.println("_____________________合并_____________________");Stream<Double> stream7 = Stream.of(1.1,2.2,3.3);Stream<Double> stream8 = Stream.of(4.4,5.5,6.6);Stream<Double> stream9 = Stream.concat(stream7,stream8);stream9.forEach(System.out::println);}
}
/*
张三丰
张无忌
张翠山
——————————排序——————————
1.1
1.1
1.1
2.1
3.1
4.1
———————————自定义排序———————————
4.1
3.1
2.1
1.1
1.1
1.1
——————————————谋取前几个元素————————————————
1.1
1.1
——————————————————跳过前几个元素—————————————————————
1.1
2.1
3.1
4.1
_______________________去重____________________
4.1
2.1
3.1
1.1
_____________________映射_____________________
8.2
4.2
6.2
2.2
_____________________合并_____________________
1.1
2.2
3.3
4.4
5.5
6.6*/

4、步骤3:Stream流的终极方法

  • 终结方法指的是调用完成后,不会返回新的Stream流了,没法继续使流了。

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;public class Demo5Stream {public static void main(String[] args) {List<Teacher> list = new ArrayList<>();list.add(new Teacher("张三", 18, 5000));list.add(new Teacher("张三丰", 50, 5006));list.add(new Teacher("张无忌", 20, 66008));list.add(new Teacher("张翠山", 30, 4000));list.add(new Teacher("赵敏", 18, 15000));list.stream().filter(t -> t.getSalary() > 10000).forEach(System.out::println);System.out.println("-----------------");long count = list.stream().count();System.out.println(count);System.out.println("-----------------");Optional<Teacher>max = list.stream().max((t1, t2) -> Double.compare(t1.getSalary(), t2.getSalary()));System.out.println(max.get()); //输出最大值对象System.out.println("-----------------");Optional<Teacher>min = list.stream().min((t1, t2) -> Double.compare(t1.getSalary(), t2.getSalary()));System.out.println(min.get());}
}/*Teacher{name='张无忌', age=20, salary=66008.0}
Teacher{name='赵敏', age=18, salary=15000.0}
-----------------
5
-----------------
Teacher{name='张无忌', age=20, salary=66008.0}
-----------------
Teacher{name='张翠山', age=30, salary=4000.0}*/

5、收集Stream流

  • 收集Stream流:就是把Stream流操作后的结果传回到集合或者数组去返回。
  • Stream流:方便操作集合/数组的手段
  • 集合/数组:才是开发中的目的

import java.util.*;
import java.util.stream.Collectors;public class Demo6Stream {public static void main(String[] args) {//一个流只能收集一次System.out.println("--------------收集到List集合---------------------");List<String> list = new ArrayList<>();list.add("张三");list.add("张三丰");list.add("张无忌");list.add("熊大");list.add("赵敏");//把流收集到List集合List<String> li = list.stream().collect(Collectors.toList());li.forEach(System.out::println);System.out.println("--------------收集到Set集合---------------------");List<String> list1 = new ArrayList<>();list1.add("张三");list1.add("张三丰");list1.add("张无忌");list1.add("熊大");list1.add("赵敏");//把流收集到Set集合Set<String> set = list1.stream().collect(Collectors.toSet());System.out.println( set);System.out.println("--------------收集到Map集合---------------------");//把流收集到Map集合List<Teacher1> list2 = new ArrayList<>();list2.add(new Teacher1("张三", 5000));list2.add(new Teacher1("张三丰", 5006));list2.add(new Teacher1("张无忌", 15008));
//        Map<String, Double> map = list2.stream().collect(Collectors.toMap(new Function<Teacher1, String>() {
//            @Override
//            public String apply(Teacher1 teacher1) {
//                return teacher1.getName();
//            }
//        }, new Function<Teacher1, Double>() {
//            @Override
//            public Double apply(Teacher1 teacher1) {
//                return teacher1.getSalary();
//            }
//        }));//优化Map<String, Double> map = list2.stream().collect(Collectors.toMap(Teacher1::getName, Teacher1::getSalary));System.out.println( map);System.out.println("--------------收集到数组---------------------");List<String> list3 = new ArrayList<>();list3.add("张三");list3.add("张三丰");list3.add("张无忌");list3.add("熊大");list3.add("赵敏");Object[] arr = list3.stream().toArray();System.out.println(Arrays.toString(arr));}
}
/*
--------------收集到List集合---------------------
张三
张三丰
张无忌
熊大
赵敏
--------------收集到Set集合---------------------
[张三, 熊大, 张三丰, 赵敏, 张无忌]
--------------收集到Map集合---------------------
{张三=5000.0, 张三丰=5006.0, 张无忌=15008.0}
--------------收集到数组---------------------
[张三, 张三丰, 张无忌, 熊大, 赵敏]*/

http://www.dtcms.com/a/577184.html

相关文章:

  • 如何用ae做模板下载网站wordpress搭建知识库
  • 网站开发需求清单南昌seo搜索排名
  • N32H高性能32位MCU在具身机器人上的应用
  • 网站广告收费标准电子工程网络通信的专业课
  • 实时将大模型的解决方案转换为随机应变的机器人指令
  • 在 Vue 3 + Vite 项目中使用 Less 实现自适应布局:VW 和 VH 的应用
  • codeforces1914 C~F
  • 海外住宅ip怎么区分干净程度以及怎么选择海外住宅ip
  • 酒店团购的网站建设承德网媒
  • 在网站中动态效果怎么做网站的备案要求
  • 昭和仙君(五十八)标签票据模板服务器端技术——东方仙盟筑基期
  • Dart语言空安全概念与原理详解
  • MongoDB 查询分析
  • 如何在OnePlus手机上删除短信
  • MQTT的QoS2中四次握手与TCP的三次握手、四次挥手的异同
  • 10个css更新
  • Git 实现github仓库管理-删除指定目录下的所有文件并保留目录结构
  • INT305 Machine Learning 机器学习 Pt.6 卷积神经网络(Convolutional Neural Network)
  • 方案分享:一款基于低功耗单片机的腰腹甩脂机方案
  • 鸿蒙开发TypeScript第三课:数组
  • React 15
  • 浏览器开发者工具(尤其是 Vue Devtools 扩展)和 Vuex 的的订阅模式冲突
  • 网站建设核电程序员找工作的网站
  • 特殊三列布局需求
  • js(DOM)基础:11、DOM定义、事件、文档的加载、DOM查询1、DOM实现轮播图、DOM查询2、DOM实现全选
  • 想做个电影网站该怎么做阳春ycqq人才招聘信息
  • JavaScript的Web APIs 入门到实战(day4):DOM 进阶与日期对象(附巩固练习和案例讲解)
  • AtCoder Educational DP Contest 刷题记录Ⅰ
  • WPF CalcBinding简化判断逻辑
  • HarmonyOS NFC应用开发:构建分布式近场通信解决方案