Lambda表达式:
一个接口中只有一个抽象方法基本的Lambda使用
package lambda;
public class LambdaPractice {
public static void main(String[] args) {
A1 a1 = new A1() {
@Override
public void m1() {
System.out.println("HelloWorld");
}
@Override
public void m2() {
System.out.println("你好");
}
};
a1.m1();
a1.m2();
B1 b2 = (age) -> System.out.println(age);
b2.m1(22);
C1 c1 = (stature) -> stature;
System.out.println("stature身高"+c1.m1(170));
D1 d1 = (age,name) -> {
return name;
};
System.out.println(d1.name(21, "张三"));
}
interface A1{
void m1();
void m2();
}
@FunctionalInterface
interface B1{
void m1(int age);
}
@FunctionalInterface
interface C1{
int m1(int stature);
}
interface D1{
String name(int age,String name);
}
}
在集合中的使用
package lambda;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Lambdapractice002 {
public static void main(String[] args) {
ArrayList<String> strings = new ArrayList<>();
strings.add("小米");
strings.add("华为");
strings.add("三星");
strings.add("apple");
strings.add("apple");
Stream<String> stream = strings.stream();
System.out.println("------stream输出打印集合-----");
strings.stream().forEach(System.out::println);
System.out.println("-----stream去重----");
System.out.println(strings.stream().distinct().collect(Collectors.toList()));
System.out.println("------放到set集合去重------");
HashSet hashSet = new HashSet(strings);
hashSet.stream().forEach(System.out::println);
ArrayList<Students> list = new ArrayList<>();
list.add(new Students("张三",20));
list.add(new Students("李四",25));
list.add(new Students("王五",30));
list.add(new Students("王五",30));
list.add(new Students("孙六",45));
System.out.println("----stream设置条件----");
System.out.println(list.stream().filter(s -> s.getAge() > 20).collect(Collectors.toList()));
System.out.println("--------集合泛型是实体类 stream去重(在实体类中需要重写HashCode和equals方法)---------");
list.stream().distinct().forEach(System.out::println);
System.out.println("-----排序------");
list.stream().sorted((e1,e2) -> Integer.compare(e2.getAge(), e1.getAge())).forEach(System.out::println);
System.out.println("------------stream limit用法--------");
list.stream().limit(3).forEach(System.out::println);
System.out.println("------------stream skip(跳过)用法--------");
list.stream().skip(4).forEach(s -> System.out.println(s));
System.out.println("----转map取某个字段----");
list.stream().map(s -> s.getName()).forEach(System.out::println);
System.out.println("-----parallel 采用多线程 -----");
list.stream().parallel().forEach(System.out::println);
System.out.println("---------终止操作 min(根据某个字段取最小的)---------");
Optional<Students> min = list.stream().min(Comparator.comparingInt(Students::getAge));
System.out.println(min);
System.out.println("---------终止操作 min(根据某个字段取最大的)---------");
Optional<Students> max = list.stream().max(Comparator.comparingInt(Students::getAge));
System.out.println(max);
System.out.println("------count 取集合中的个数------");
long count = list.stream().count();
System.out.println(count);
System.out.println("----reduce 计算某列的总和----");
Optional<Integer> reduce = list.stream().map(s -> s.getAge()).reduce((x, y) -> x + y);
System.out.println(reduce.get());
System.out.println("----collect 取某个字段封装成一个集合----");
List<String> nameList = list.stream().map(s -> s.getName()).collect(Collectors.toList());
nameList.forEach(System.out::println);
}
static class Students{
public Students() {
}
public Students(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
private int age;
@Override
public String toString() {
return "Students{" +
"name='" + name + '\'' +
", 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;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Students students = (Students) o;
return age == students.age && name.equals(students.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
}
时区(ZoneId)、时间戳(Instant)、以及Date、Instant、LocalDateTime之间的相互转换
package lambda;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.Set;
public class DateAndInstantPractice {
public static void main(String[] args) {
Instant now = Instant.now();
System.out.println("当前时间--------"+now);
Instant plusSeconds = now.plusSeconds(10);
System.out.println(Duration.between(now, plusSeconds).toMillis());
Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
availableZoneIds.stream().forEach(System.out::println);
System.out.println(ZoneId.systemDefault());
LocalDateTime nowDate = LocalDateTime.now();
System.out.println("获取年==="+nowDate.getYear());
System.out.println("获取月==="+nowDate.getMonthValue());
System.out.println("获取分钟==="+nowDate.getMinute());
LocalDateTime plusDays = nowDate.plusDays(2);
System.out.println("增加两天==="+plusDays);
LocalDateTime minusMonths = nowDate.minusMonths(1);
System.out.println("减少一个月==="+minusMonths);
System.out.println("-----Date转Instant转LocalDateTime------");
System.out.println("-----Date转Instant---有八个小时的误差---");
Date date = new Date();
Instant instant = date.toInstant();
System.out.println("-----Date转Instant------"+instant);
System.out.println("-----Instant转LocalDateTime---没有时间上的误差---");
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println("-----Instant转LocalDateTime------"+localDateTime);
System.out.println("-----LocalDateTime转Instant-----");
Instant toInstant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
System.out.println("LocalDateTime转Instant"+toInstant);
System.out.println("Instant转Date");
Date date1 = Date.from(toInstant);
System.out.println(date1);
}
}
时间格式化DateTimeFormatter的使用
package lambda;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class DateTimeForMatter {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat.format(date);
System.out.println(format1);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dateTimeFormatter.format(LocalDateTime.now());
System.out.println(format);
LocalDateTime parse = LocalDateTime.parse("2021-05-22 10:25:15", dateTimeFormatter);
System.out.println(parse);
}
}
常用的操作
public class OftenUse {
public static void main(String[] args) {
List<User> userList = IntStream.rangeClosed(0, 20).mapToObj(i -> new User(i, "name/" + i, i)).collect(Collectors.toList());
List<User> list = new ArrayList<>();
list.add(new User(1, "张三", 20));
list.add(new User(1, "李四", 10));
list.add(new User(3, "王五", 30));
list.add(new User(4, "老刘", 22));
list.add(new User(5, "王六", 22));
list.add(new User(5, "王六", 55));
int sum = list.stream().map(User::getAge).collect(Collectors.toList()).stream()
.map(age -> Objects.isNull(age) ? 0 : age).mapToInt(age -> age).sum();
System.out.println(sum);
IntSummaryStatistics intSummaryStatistics = list.stream().map(User::getAge).collect(Collectors.toList()).stream()
.map(age -> Objects.isNull(age) ? 0 : age).mapToInt(age -> age).summaryStatistics();
System.out.println(intSummaryStatistics.getSum());
System.out.println(intSummaryStatistics.getMin());
System.out.println(intSummaryStatistics.getMax());
System.out.println(intSummaryStatistics.getAverage());
System.out.println(intSummaryStatistics.getCount());
System.out.println("----");
IntSummaryStatistics statistics = Stream.of(1, 2, 3, 4).mapToInt(num -> num).summaryStatistics();
System.out.println(statistics.getSum());
System.out.println(statistics.getMin());
System.out.println(statistics.getMax());
System.out.println(statistics.getAverage());
System.out.println(statistics.getCount());
System.out.println("|||||");
Integer reduce = Stream.of(1, 2, 3, 4).reduce(1, Integer::sum);
System.out.println(reduce);
System.out.println(";;;;;;");
Map<Integer, IntSummaryStatistics> summaryStatisticsMap = list.stream().collect(Collectors.groupingBy(User::getAge, Collectors.summarizingInt(User::getId)));
System.out.println(summaryStatisticsMap);
System.out.println("///");
Map<Integer, String> collect = list.stream().collect(Collectors.groupingBy(User::getAge, Collectors.mapping(User::getName, Collectors.joining(","))));
System.out.println(collect);
}
}