栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-29

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-29

Java学习 day25 Lambda

lambda表达式允许你通过表达式来代替功能接口。可以代替匿名内部类的使用。

public class Test{
	public static void main(String[] args){
	
	//方法一:创建匿名内部类
	I1 i1 = new I1() {
		@Override
		public String getValue(String str) {
			return str.toUpperCase();
		}
	};
	//方法二:用Lambda
	I1 i1 = (String str) -> {
		return str.toUpperCase();
	};
	i1.getValue("abc");
}}
interface I1{
	public String getValue(String str);
}
流 – stream

Java 8 API添加了一个新的抽象称为流:Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream是对集合的包装,通常和lambda一起使用。

stream的特性 1.stream不存储数据

通常我们在数组或集合的基础上创建stream,stream不会专门存储数据。

2.stream不改变源数据

对stream的操作也不会影响到创建它的数组和集合,对于stream的聚合、消费或收集操作只能进行一次,再次操作会报错。

3.stream的延迟执行特性

延迟性是指当stream的终结操作执行的时候,前面的中间操作才执行。

当我们操作一个流的时候,一般并不会修改流底层的集合(即使集合是线程安全的),如果遍历的时候删除和添加会抛出ConcurrentModificationException异常,而ls.stream().foreach()的时候调用ls的set方法是可以的(比如ls。set(0,0))是可以修改原来集合的元素,如果集合里存的是引用类型也可以重新set或者直接改变对象里的字段。
由于stream的延迟执行特性,在聚合操作执行前修改数据源是允许的。并且会影响到流里。

		//创建流对象:
		//方法1:通过Collection接口提供的stream()-串行流或			parallelStream()-并行流 获取流对象
		@Test
		public void method1(){
			ArrayList list = new ArrayList<>();
			list.add("张三");
			list.add("李四");
			list.add("王五");
			Stream stream = list.stream();//创建流对象
			stream.forEach(System.out ::println);//打印
		}
		//方法2:通过数组Arrays的静态方法stream()
	    @Test
		public void method2(){
			String[] ss = {"张三", "李四", "王五"};
			Stream stream2 = Arrays.stream(ss);
			stream2.forEach(System.out ::println);
		}
		
		//方法3:通过Stream的静态方法of()获取流对象
	    @Test
		public void method3(){
			Stream stream3 = Stream.of("张三", "李四", "王五");
			stream3.forEach(System.out ::println);
		}
	    
	    //方法4:通过迭代器iterate创建无限流
	    @Test
		public void method4(){
	    	Stream stream = Stream.iterate(1, (i)->i+=100);
	    	stream.limit(5).forEach(System.out:: println);
	    }
	    
	    //方法5:通过generate()生成无限流
	    @Test
	    public void method5(){
	    	Stream stream = Stream.generate(()->Math.random());
	    	stream.limit(3).forEach(System.out::println);
	    }

流Stream与Limbda结合:

//需求,过滤filter,并输出
@Test
public void method(){
	List stuList = Arrays.asList(
		new Student("张三", 28, 4800,Cource.JAVA),
		new Student("李四", 36, 7200,Cource.JAVA),
		new Student("王五", 19, 9600,Cource.HTML),
		new Student("赵六", 42, 6100,Cource.HTML),
		new Student("孙七", 23, 9600,Cource.PYTHON));
	stuList.stream().filter((Student stu)->{
		if(stu.getSalary() >= 5000){
			return true;
		}
		return false;
	}).limit(3).forEach(System.out:: println);
}
时间日期类:DateTimeFormatter
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号