2021-11-12 迈向程序猿的第二十七步

目录

一.Stream

1.1 Stream的过程操作

1.2 Stream终止操作

二.新的日期类

2.1 日期类获取

2.2 日期类的转换


一.Stream

1.1 Stream的过程操作

//Stream中间过程操作:
//案例:集合存储自定义对象,然后转Stream进行中间过程操作
class Person{
	private String name;
	private int age;
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person() {
	}
	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;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}
public class Test1 {
	public static void main(String[] args) {
		List<Person> list = new ArrayList<Person>();
		list.add(new Person("张三", 30));
		list.add(new Person("李四", 35));
		list.add(new Person("王五", 32));
		list.add(new Person("赵六", 36));
		list.add(new Person("李四", 35));
		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.2 Stream终止操作

//终止操作:
//获取到Stream的最终结果
public class Test2 {
	public static void main(String[] args) {
		List<Person> list = new ArrayList<Person>();
		list.add(new Person("张三", 30));
		list.add(new Person("李四", 35));
		list.add(new Person("王五", 32));
		list.add(new Person("赵六", 36));
		list.add(new Person("李四", 35));
		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.1 日期类获取

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

//Instant: 时间戳    与时区有关,和本地时间差8小时
//
public class Test1 {
	public static void main(String[] args) {
		LocalDate localDate = LocalDate.now();
		System.out.println("本地日期:"+localDate);
		
		LocalTime localTime = LocalTime.now();
		System.out.println("本地时间:"+localTime);
		
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println("本地日期与时间:"+localDateTime);
		
		Instant instant = Instant.now();
		System.out.println("时间戳:"+instant);
		
		Set<String> set = ZoneId.getAvailableZoneIds();
		for(String sq:set) {
			System.out.println(sq);
		}
		
		ZoneId zoneId = ZoneId.systemDefault();
		System.out.println("当前时区:"+zoneId);
		
		
	}
}

2.2 日期类的转换

//Date-->Instant--->LocalDateTime
//LocalDateTime-->Instant-->Date

//DateTimeFormatter: 本地日期格式类
public class Test2 {
	public static void main(String[] args) {
		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、付费专栏及课程。

余额充值