30.Stream与新的日期类

Stream:类似于集合,只不过集合是存数据的; Stream只是操作中间过程
Stream使用:
1.创建Stream
2.Stream的中间操作过程
3.Stream的终止操作: 遍历

1.Stream的创建:

1.通过List集合获取Stream对象 

单线程流--有序

//1.通过List集合获取Stream对象
		List<String> list = new ArrayList<String>();
		list.add("zs");
		list.add("ls");
		list.add("ww");
		//单线程流--有序
		list.stream().forEach(System.out::println);
		System.out.println("--------------");
		//多线程流--无序
		list.parallelStream().forEach(System.out::println);
		
		//Arrays方式创建Stream
		Arrays.stream(new int[]{1,3,2}).forEach(System.out::println);
		
		//Stream接口的of方法创建
		Stream.of("aa","cc","bb").forEach(System.out::println);
		
		//Stream接口的iterate方法创建: 迭代(参数1:初始值  参数2:在当前值基础上的迭代)
		//limit(4):中间过程,限制多少个
		Stream.iterate(2, t->t+1).limit(4).forEach(System.out::println);
		
		//Stream接口的generate方法创建
		System.out.println("-----");
		Stream.generate(()->new Random().nextInt(6)).limit(3).forEach(System.out::println);

		//IntStream的of,range,rangeClosed
		System.out.println("====of===");
		IntStream.of(3,5,8).forEach(System.out::println);
		System.out.println("====range:开区间,不包括最后一个===");
		IntStream.range(3, 6).forEach(System.out::println);
		System.out.println("====range:闭区间,包括最后一个===");
		IntStream.rangeClosed(3, 6).forEach(System.out::println);

1.2.Stream的过程操作

System.out.println("filter:过滤");
		list.stream().filter(p->p.getAge()>=35).forEach(System.out::println);
		System.out.println("limit:限制");
		list.stream().limit(3).forEach(System.out::println);
		System.out.println("skip:跳过");
		list.stream().skip(1).forEach(System.out::println);
		
		System.out.println("distinct:去重--需重写hashCode和equals");
		list.stream().distinct().forEach(System.out::println);
		
		System.out.println("sorted:排序");
		list.stream().sorted((o1,o2)->o1.getAge()-o2.getAge()).forEach(System.out::println);
	
		System.out.println("map:映射");
		list.stream().map(p->p.getName()).forEach(System.out::println);
		
		System.out.println("parallel:多线程操作");
		list.stream().parallel().forEach(System.out::println);
		
	}

1.3.Stream终止操作
终止操作:
获取到Stream的最终结果

System.out.println("min:求最小值");
		System.out.println(list.stream().min((o1,o2)->o1.getAge()-o2.getAge()));
		System.out.println("max:求最大值");
		System.out.println(list.stream().max((o1,o2)->o1.getAge()-o2.getAge()));
		
		System.out.println("count:求个数");
		System.out.println(list.stream().count());
		
		System.out.println("reduce:汇总,先映射成age累加");
		System.out.println(list.stream().map(p->p.getAge()).reduce((a1,a2)->a1+a2).get());
		
		System.out.println("collect: 转其他集合输出");
		System.out.println(list.stream().collect(Collectors.toSet()));

2. 新的日期类
2.1 日期类获取

本地日期类: LocalDate,LocalTime,LocalDateTime
场景:在单线程中我们可以直接使用Date即可;在多线中Date不具备安全性,所以需要使用本地日期

Instant: 时间戳    与时区有关,和本地时间差8小时

LocalDate localDate = LocalDate.now();//本地日期
LocalTime localTime = LocalTime.now();//本地时间
LocalDateTime localDateTime = LocalDateTime.now();//本地日期与时间
Instant instant = Instant.now();  //时间戳
ZoneId zoneId = ZoneId.systemDefault();//当前时区

2.2 日期类的转换
Date-->Instant--->LocalDateTime
LocalDateTime-->Instant-->Date

        Date date = new Date();
		//Date-->Instant
		Instant instant = date.toInstant();
		System.out.println("date转Instant:"+instant);
		
		//Instant-->LocalDateTime
		LocalDateTime ldt = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
		System.out.println("Instant转LocalDateTime:"+ldt);
		
		//LocalDateTime-->Instant
		Instant instant2 = ldt.atZone(ZoneId.systemDefault()).toInstant();
		System.out.println("LocalDateTime转Instant:"+instant2);
		
		//Instant-->Date
		System.out.println("Instant转Date:"+Date.from(instant2));
		
		//本地日期格式类
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
		//日期格式转出来是字符串类型
		System.out.println(dtf.format(LocalDateTime.now()));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值