三部分
一些参数
一个箭头
一段代码
格式
使用Lambda必须要有接口,且要求接口中有且仅有一个抽象方法
比如通过new Tread创建线程时使用。
//Map对象
Map<String,String> map= new HashMap<>();
map.forEach((k,v)->{
// 打印键
System.out.println(k);
// 打印值
System.out.println(v);
});
//list对象
List<Stu> list = new ArrayList();
list.forEach((l)->{
System.out.println(l.getId());
System.out.println(l.getName());
});
//Set对象
Set<Stu> set = new HashSet<>();
set.forEach((s)->{
System.out.println(s.getId());
System.out.println(s.getName());
});
List<String> ids = new ArrayList<>();
List<String> collect = ids.stream().map(a -> a + "123").collect(Collectors.toList());
//对象数据
List<User> list = new ArrayList<>();
List<User> collect = list.stream().filter(user -> !"张三".equals(user.getName()))
.collect(Collectors.toList());
//单一数组
List<String> ids = new ArrayList<>();
List<String> collect = ids.stream().filter(id -> id.startsWith("12") && id.equals("123")).collect(Collectors.toList());
//对象排序
//正序
List<User> list = new ArrayList<>();
list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
//反序
list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
//基本类型集合排序
List<Integer> ids = new ArrayList<>();
//正序
ids.stream().sorted();
//反序
ids.stream().sorted(Comparator.reverseOrder());
//map按key排序
Map<Integer, Object> map = new HashMap<>();
List<Map.Entry<Integer, Object>> mapList = new ArrayList<>(map.entrySet());
mapList.sort(Comparator.comparing(Map.Entry::getKey));
//遍历排序map
mapList.forEach(entry -> {});
// list通过filter后再转字符串
String collect = ids.stream().filter("123"::equals).collect(Collectors.joining("-"));
// 普通list转字符串
String collect2 = String.join("-", ids);
List<User> list = new ArrayList<>();
List<Integer> collect = company.stream().map(User::getAge).collect(Collectors.toList());
List<Integer> list = Arrays.asList(12, 34, 23, 12, 3, 34);
IntSummaryStatistics stats = list.stream().mapToInt(x -> x).summaryStatistics();
//最大值
stats.getMax();
//最小值
stats.getMin();
//平均值
stats.getAverage();
//总数
stats.getCount();
//总和
stats.getSum();
int[] nums = {33, 44, 55, -111, -1};
int min = IntStream.of(nums).min().getAsInt();
System.out.println(min);
DateTime取代Date类,该类的API修复了不合理的常量表示,严格按照ISO 8601规定的日期和时间格式进行输出,ISO 8601通过T
进行日期和时间的分隔。
比如:
LocalDate d = LocalDate.now(); // 当前日期
LocalTime t = LocalTime.now(); // 当前时间
LocalDateTime dt = LocalDateTime.now(); // 当前日期和时间
// 指定各独立的日期和时间:
LocalDate d2 = LocalDate.of(2022, 4, 20); // 2022-04-20, 注意04=4月
LocalTime t2 = LocalTime.of(15, 16, 17); // 15:16:17
LocalDateTime dt2 = LocalDateTime.of(2022, 4, 20, 15, 16, 17);//2022-04-20T15:16:17
LocalDateTime dt3 = LocalDateTime.of(d2, t2);//2022-04-20T15:16:17
//传入时间字符串
LocalDate d = LocalDate.parse("2022-04-20");
LocalTime t = LocalTime.parse("15:16:17");
LocalDateTime dt3 = LocalDateTime.parse(" 2022-04-20 15:16:17");
加时间:plusXXX(value),减时间:minusXXX(value)
LocalDateTime dt = LocalDateTime.now();
// 加1天减1小时:
LocalDateTime dt2 = dt.plusDays(1).minusHours(1);
// 减1月:
LocalDateTime dt3 = dt2.minusMonths(1);
System.out.println(dt3);
//对时间进行操作,出现跨年、跨月操作时,时间会自动进行转换,比如:2019-10-31减去1个月得到的结果是2019-09-30,因为9月没有31日。
对日期和时间进行调整则使用withXxx()
方法,例如:withHour(15)
会把10:11:12
变为15:11:12
:
LocalDate dt = LocalDate.of(2020, 3, 31); //2020-03-31
System.out.println(dt);
// 月份变为4:
LocalDate dt3 = dt.withMonth(4);
System.out.println(dt3); //2020-04-30
//对时间进行操作,出现跨年、跨月操作时,时间会自动进行转换,比如:2020-03-31调整为4个月得到的结果是2020-04-30,因为4月没有31日。
通过with()
可以进行更加复杂的运算
dayOfWeekInMonth //它的值为同一个月中每一周的第几天
firstDayOfMonth //它的值为当月的第一天
firstDayOfNextMonth //它的值为下月的第一天
firstDayOfNextYear //它的值为明年的第一天
firstDayOfYear //它的值为当年的第一天
firstInMonth //它的值为同一个月中,第一个符合星期几要求的值
lastDayOfMonth //它的值为当月的最后一天
lastDayOfYear //它的值为今年的最后一天
//对指定星期的操作 - DayOfWeek
lastInMonth //它的值为同一个月中,符合星期几要求的值
next/previous//将日期向前一周或者向后一周,调整到指定星期几
nextOrSame/previousOrSame //将日期向前或者向后,调整到指定星期几(如当前日期不存在于调整周的区间内则跨周),比如调整到周四,如果当天周二,则为本周周四;如果当天周五,则为下周四
//实列
LocalDate dt = LocalDate.now();
//明年的第一天
System.out.println(dt.with(TemporalAdjusters.firstDayOfNextYear()));
//两周后的周五
System.out.println(dt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)).plusWeeks(1));
ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区时间
ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York"));//指定时区获取当前时间
//atZone时区转换,通过ZoneId指定要转换到的时区
//LocalDateTime转ZonedDateTime
LocalDateTime ldt = LocalDateTime.now();
//2020-04-15T15:16:17+08:00[Asia/Shanghai] 获取吗默认时区
ZonedDateTime zbj = ldt.atZone(ZoneId.systemDefault());
//2020-04-15T03:16:17-04:00[America/New_York],与美国差12小时
ZonedDateTime zny = ldt.atZone(ZoneId.of("America/New_York"));
//时区转换
//转为指定时区时间
ZonedDateTime zny = ldt.withZoneSameInstant(ZoneId.of("America/New_York"));
//转为当前时区时间
LocalDateTime date = zny.toLocalDateTime();
System.currentTimeMillis();//毫秒级时间戳
Instant now = Instant.now();
System.out.println(now.getEpochSecond()); // 秒
System.out.println(now.toEpochMilli()); // 毫秒
Instant.ofEpochSecond(value);//设置秒时间戳
Instant.ofEpochMilli(value);//设置毫秒时间戳
//当前时间戳转换为指定时区
Instant ins = Instant.now();
ZonedDateTime zdt = ins.atZone(ZoneId.of("America/New_York"))
//时间戳转LocalDateTime
LocalDateTime time = LocalDateTime.ofInstant(Instant.ofEpochMilli(systemTime), ZoneId.systemDefault());
LocalDateTime dt = LocalDateTime .now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dateTimeFormatter.format(dt));
LocalDate startDate=startDate;
LocalDate endDate=endDate;
long y = ChronoUnit.YEARS.between(startDate, endDate); //获取两个日期间隔年
long m = ChronoUnit.MONTHS.between(startDate, endDate);//获取两个日期间隔月
long d = ChronoUnit.DAYS.between(startDate, endDate); //获取两个日期间隔天