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

4.7学习总结

java学习

一.Stream流

(一.)概念:

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。Stream流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。

特点:

  • stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
  • stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
  • stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

(二.)Stream的创建

1.Collection集合创建

List<Integer> integerList = new ArrayList<>();
Collection.addAll(integerList,1,2,3,4,5);        
Stream<Integer> listStream = integerList.stream();

2.Stream创建对象

List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();  //串行流
Stream<String> parallelStream = list.parallelStream(); //并行流

3.Arrays数组创建

int[] Arr = {1, 2, 3, 4, 5};
IntStream arrayStream = Arrays.stream(Arr);

(三.)操作符

1.中间操作符

 中间操作会返回一个新的流,一个流可以后面跟随零个或多个中间操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后会返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历。而是在终结操作开始的时候才真正开始执行。

public class stream4 {public static void main(String[] args) {//中间方法,返回新的steam流,原来的stream流只能使用一次//修改stream流中的数据,不会改变原来集合中的元素ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张三","张三疯","喜洋洋","美洋洋","柳如烟","李四");//1.filter 过滤作用list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//2.skip 跳过元素list.stream().skip(3).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//3.limit 获取前几个元素list.stream().limit(3).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//4.获取中间的两元素的方法://1.仙截取后跳过list.stream().limit(4).skip(2).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//2.仙跳过后截取list.stream().skip(2).limit(2).forEach(s-> System.out.println(s));System.out.println("--------------------------------");}
}

 运行结果:

2.终结操作符

 终结操作是指返回最终的结果。一个流只能有一个终结操作,当这个操作执行后,这个流就被使用“光”了,无法再被操作。所以这必定这个流的最后一个操作只有终结操作执行的时候,才会真正开始流的遍历,并且会生成一个结果。

(四.)使用实例

要求将一组数据中,对大于一定年龄的人放入到map集合中,并进行输出

public class TEXT2 {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张三,12","李四,15","王五,16");//匿名内部类的写法Map<String, Integer> map = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 15).collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {return s.split(",")[0];}}, new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s.split(",")[1]);}}));System.out.println(map);System.out.println("---------------------------");//lambda表达式写法Map<String, String> map2 = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 15).collect(Collectors.toMap(s -> s.split(",")[1],s -> s.split(",")[0]));System.out.println(map2);System.out.println("----------------------------");}
}

运行结果:

二.方法引用

(一.)方法引用的概念和规则

方法引用:把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体.

方法引用的规则:

1.需要具有函数式接口

2.被引用的方法必须存在.

3.被引用的方法和返回值和形参与抽象方法一致.

4.被引用方法的功能要满足当前需求.

(二.)引用静态方法

格式:类名::静态方法

引用类方法,其实就是引用类的静态方法

public class yinyong {public static void main(String[] args) {ArrayList<String> list =new ArrayList<>();Collections.addAll(list,"1","2","3","15564222","126");list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {Integer i = Integer.parseInt(s);return i;}}).forEach(s-> System.out.println(s));System.out.println("-------------------");//1.方法需要已经存在//2.方法的形参和返回值需要跟抽象方法的形参和返回值一样//3.方法的功能需要吧形参的字符串转换成整数list.stream().map(Integer::parseInt).forEach(s-> System.out.println(s));}
}

 

(三).引用成员方法

格式:对象::成员方法

引用对象的实例方法,其实就引用类中的成员方法

public class StringOperation {public boolean stringJudge(String s) {return s.startsWith("张");}
}public class yinyong2 {public static void main(String[] args) {ArrayList<String> list =new ArrayList<>();Collections.addAll(list,"张三","李四","王五","张飞","客小二");//通过在其他类中进行引用//先创建对象,在进行引用list.stream().filter(new StringOperation()::stringJudge).forEach(s-> System.out.println(s));}
}

(四.)引用构造器

格式:类名::构造方法

(注意构造方法中的形参必须和抽象方法保持一致)

public class Student {private String name;private int age;public Student(String s) {String[] arr=s.split(",");this.name=arr[0];this.age=Integer.parseInt(arr[1]);}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}public class yinyong3 {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张三,15","李四,16","王五,17");List<Student> cc = list.stream().map(Student::new).collect(Collectors.toList());System.out.println(cc);}
}

http://www.lryc.cn/news/333780.html

相关文章:

  • 自定义gitlog格式
  • Redission--分布式锁
  • 非关系型数据库(缓存数据库)redis的集群
  • MySQL:表的约束(上)
  • 树莓派5使用体验
  • 代码随想录算法训练营第42天| 背包问题、416. 分割等和子集
  • Node.js安装及环境配置指南
  • 【Java基础】面试题汇总
  • 数据库事务的超级详细讲解,包括事务特性、事务隔离级别、MVCC(多版本并发控制)
  • 鸿蒙Lottie动画-实现控制动画的播放、暂停、倍速播放、播放顺序
  • C++面试100问与自动驾驶100问
  • 加速 Redis 操作:掌握管道技术提升性能与效率
  • 深入浅出 -- 系统架构之分布式系统底层的一致性
  • idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页
  • xss【2】
  • 时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解
  • css- 4
  • 22.括号生成
  • JAVA八股--redis
  • [图像处理] MFC载入图片并绘制ROI矩形
  • Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置
  • 强行让Java和Go对比一波[持续更新]
  • 理解七层网络协议
  • 网络协议——HTTP协议
  • 八股面试——数据库——索引
  • 【二分查找】Leetcode 二分查找
  • Python+Vuecil笔记
  • C语言关于随机数知识点的总结
  • 网络应用层和传输层
  • Vue3:优化-从响应式数据中获取纯数据