Java8 lambda 的使用
作者:互联网
Java8 lambda 的使用
1.Java8 新特性介绍
原文链接 https://my.oschina.net/chenxiaobian/blog/704421,https://www.cnblogs.com/hmdrzql/p/6354010.html
现在我们有一个需求:给一个user组成的list 按照user的年龄排序。实现不难,代码如下:
UserCompare是一个实现了Comprator的类
这种方法由于sort方法的第二个参数是Comparator 所以你要写一个实现类(我这里是UserCompare类),并且override该接口的实现方法。
java8提供了lambda来简化,有了lambda程序员从此不加班呀~
刚才那个Comparator的实现类以及内部若干代码就都省了,代之以lambda表达式。
另外,IntelliJ会提示你改成更好的写法
实现类里有多少代码,你就省了多少行代码。
高兴了半天,到底是什么原理呢?其实是java8新提供的语法糖。
我们打开java1.8 Comparator的定义,发现了类定义上面多了一个@FunctionalInterface
对,1.8多了一个概念就是FunctionalInterface,这个Comparator就是一个FunctionalInterface
有了这个注解,原来使用实现类的地方就可以代之以lambda表达式。
写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下:
- Lambda表达式
- 函数式接口
- Stream
- Optional
- Predicate
- Function
- Consumer
- Filter
- Map-Reduce
- 新的Date API
最核心的当然是函数式编程了,写代码非常简单,请看下面详细例子介绍
2.Java8 lambda使用总结-结合实例介绍
很多同学一开始接触Java8可能对Java8 Lambda表达式有点陌生,下面我将结合实例介绍Java8的使用 并与Java7进行比较:
基础类
- @Data
- @Builder
- @AllArgsConstructor
- @NoArgsConstructor
- public class Person {
- private int id;
- private String name;
- private String address;
- }
1.List操作
- public class ExampleList {
- private static List<String> items = new ArrayList<>();
- static {
- items.add("A");
- items.add("BC");
- items.add("C");
- items.add("BD");
- items.add("E");
- }
- public static void main(String[] args) {
- //Java8之前操作List
- for(String item:items){
- System.out.println(item);
- }
- //Java8 lambda遍历list
- items.forEach(c-> System.out.println(c));
- items.forEach(item->{
- if("C".equals(item)){
- System.out.println(item);
- }
- });
- System.out.println("--------");
- //先过滤
- items.stream().filter(s->s.contains("B")).forEach(c1-> System.out.println(c1));
- }
- }
2.Map操作
- public class ExampleMap {
- private static Map<String, Integer> items = new HashMap<>();
- static {
- items.put("A", 10);
- items.put("B", 20);
- items.put("C", 30);
- items.put("D", 40);
- items.put("E", 50);
- items.put("F", 60);
- }
- public static void main(String[] args) {
- //Java8之前遍历是这样遍历map
- for(Map.Entry<String,Integer> entry:items.entrySet()){
- System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
- }
- //Java8遍历map
- items.forEach((key,value)-> System.out.println("key:" + key + " value:" + value));
- }
- }
3.Groupingby操作
- /**
- *
- *Java8 Collectors.groupingBy and Collectors.mapping example
- */
- public class ExampleMapping {
- private static List<Person> personList = Lists.newArrayList();
- static {
- personList.add(Person.builder().id(10).address("apple").address("shanghai").build());
- personList.add(Person.builder().id(12).address("apple").address("wuhan").build());
- personList.add(Person.builder().id(16).address("apple").address("nanjing").build());
- }
- public static void main(String[] args) {
- //分组
- Map<String, List<Person>> collect = personList.stream().collect(Collectors.groupingBy(c -> c.getAddress()));
- System.out.println(collect);
- }
- }
4.List转换为Map
- public class ExampleListConvertMap {
- private static List<Person> personList = Lists.newArrayList();
- static{
- personList.add(Person.builder().id(20).name("zhangsan").address("shanghai").build());
- personList.add(Person.builder().id(30).name("lisi").address("nanjing").build());
- }
- public static void main(String[] args) {
- //Java8 List转换Map
- Map<Integer,Person> map_ = personList.stream().collect(Collectors.toMap((key->key.getId()),(value->value)));
- map_.forEach((key,value)-> System.out.println(key + ":" + value));
- Map<Integer, Person> mappedMovies = personList.stream().collect(
- Collectors.toMap(Person::getRank, Person::getData));
- }
- }
5.FilterMap操作
- public class ExampleFilterMap {
- private static Map<Integer,String> map_ = Maps.newHashMap();
- static{
- map_.put(1, "linode.com");
- map_.put(2, "heroku.com");
- map_.put(3, "digitalocean.com");
- map_.put(4, "aws.amazon.com");
- }
- public static void main(String[] args) {
- //before java iterator map
- String result = null;
- for(Map.Entry<Integer,String> entry:map_.entrySet()){
- if("heroku.com".equals(entry.getValue())){
- result = entry.getValue();
- }
- }
- System.out.println("Before Java 8 :" + result);
- //Java8 Map->Stream->Filter->String
- result = map_.entrySet().stream().
- filter(map->"heroku.com".equals(map.getValue()))
- .map(map->map.getValue())
- .collect(Collectors.joining());
- System.out.println("Java 8 :" + result);
- Map<Integer,String> collect = map_.entrySet().stream()
- .filter(c->c.getKey()==2)
- .collect(Collectors.toMap(p->p.getKey(),p->p.getValue()));
- System.out.println(collect);
- }
- }
6.Optional操作可以防止NullPointException
- Optional<String> optional = Optional.of("hello");
- System.out.println(optional.isPresent());//true
- System.out.println(optional.get());//hello
- System.out.println(optional.orElse("false"));
- optional.ifPresent((s)-> System.out.println(s.charAt(0)));//h
7.给出一个详细的例子
- @Data
- @Builder
- @AllArgsConstructor
- @NoArgsConstructor
- public class Employee {
- private String name;
- private int salary;
- private String office;
- }
- public class ExampleEmployee {
- private static List<Employee> employeeList = Lists.newArrayList();
- static{
- employeeList.add(Employee.builder().name("Matt").salary(5000).office("New York").build());
- employeeList.add(Employee.builder().name("Steve").salary(6000).office("London").build());
- employeeList.add(Employee.builder().name("Carrie").salary(20000).office("New York").build());
- employeeList.add(Employee.builder().name("Peter").salary(7000).office("New York").build());
- employeeList.add(Employee.builder().name("Pat").salary(8000).office("London").build());
- employeeList.add(Employee.builder().name("Tammy").salary(29000).office("Shanghai").build());
- }
- public static void main(String[] args) {
- //anyMatch
- boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
- System.out.println(isMatch);
- //返回所有salary大于6000
- boolean matched = employeeList.stream().allMatch(employee -> employee.getSalary()>4000);
- System.out.println(matched);
- //找出工资最高
- Optional<Employee> hightestSalary = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
- System.out.println(hightestSalary);
- //返回姓名列表
- List<String> names = employeeList.stream().map(employee -> employee.getName()).collect(Collectors.toList());
- System.out.println(names);
- //List转换成Map
- Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
- employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
- //统计办公室是New York的个数
- long officeCount = employeeList.stream().filter(employee -> employee.getOffice().equals("Shanghai")).count();
- System.out.println(officeCount);
- //List转换为Set
- Set<String> officeSet = employeeList.stream().map(employee -> employee.getOffice()).distinct().collect(Collectors.toSet());
- System.out.println(officeSet);
- //查找办公室地点是New York的员工
- Optional<Employee> allMatchedEmployees = employeeList.stream().filter(employee -> employee.getOffice().equals("New York")).findAny();
- System.out.println(allMatchedEmployees);
- //按照工资的降序来列出员工信息
- List<Employee> sortEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
- //按照名字的升序列出员工信息
- List<Employee> sortEmployeeByName = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
- System.out.println(sortEmployeeList);
- System.out.println("按照名字的升序列出员工信息:" + sortEmployeeByName);
- //获取工资最高的前2条员工信息
- List<Employee> top2EmployeeList= employeeList.stream()
- .sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary()))
- .limit(2)
- .collect(Collectors.toList());
- System.out.println(top2EmployeeList);
- //获取平均工资
- OptionalDouble averageSalary = employeeList.stream().mapToInt(employee->employee.getSalary()).average();
- System.out.println("平均工资:" + averageSalary);
- //查找New York
- OptionalDouble averageSalaryByOffice = employeeList.stream().filter(employee -> employee.getOffice()
- .equals("New York"))
- .mapToInt(employee->employee.getSalary())
- .average();
- System.out.println("New York办公室平均工资:" + averageSalaryByOffice);
- }
- }
8.Java8常见操作
- public class EmployeeTest {
- public static List<Employee> generateData() {
- return Arrays.asList(new Employee("Matt", 5000, "New York"),
- new Employee("Steve", 6000, "London"),
- new Employee("Carrie", 10000, "New York"),
- new Employee("Peter", 7000, "New York"),
- new Employee("Alec", 6000, "London"),
- new Employee("Sarah", 8000, "London"),
- new Employee("Rebecca", 4000, "New York"),
- new Employee("Pat", 20000, "New York"),
- new Employee("Tammy", 9000, "New York"),
- new Employee("Fred", 15000, "Tokyo"));
- }
- public static Map<String, Integer> generateMapData() {
- Map<String, Integer> items = Maps.newHashMap();
- items.put("A", 10);
- items.put("B", 20);
- items.put("C", 30);
- items.put("D", 40);
- items.put("E", 50);
- items.put("F", 60);
- return items;
- }
- @Test
- public void testEmployee() {
- List<Employee> results = generateData();
- //打印出名字是Steve的员工信息
- results.forEach(c -> {
- if (c.getName().equals("Steve")) {
- System.out.println(c);
- }
- });
- System.out.println("---------");
- //找出年薪超过6000的员工
- results.stream().filter(c -> c.getSalary() >= 60000).forEach(c -> System.out.println(c));
- System.out.println("--->>>>>>----");
- //java8遍历map
- Map<String, Integer> map_ = generateMapData();
- map_.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
- System.out.println("---->>>>分组>>>-----");
- //java8 分组操作
- Map<String, List<Employee>> groupMap = results.stream().collect(Collectors.groupingBy(c -> c.getOffice()));
- System.out.println(groupMap);
- System.out.println("---->>>>List转化为Map>>>----");
- //List转化Map
- Map<String, Object> map = results.stream().collect(Collectors.toMap(Employee::getName, Employee::getOffice));
- map.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
- System.out.println("---->>>>>>>----");
- Map<Integer, Employee> employeeMap = results.stream().collect(Collectors.toMap((key -> key.getSalary()), (value -> value)));
- employeeMap.forEach((key, value) -> System.out.println(key + "," + value));
- System.out.println("---->>遍历map>>>----");
- //打印出值大于30的map
- Map<String, Integer> resultMap = map_.entrySet().stream().filter(c -> c.getValue() > 30).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
- resultMap.forEach((key, value) -> System.out.println(key + "=" + value));
- System.out.println(">>>>>>>>>>>>>>>");
- //打印key=D的map
- Map<String, Integer> mapResults = map_.entrySet().stream().filter(c -> c.getKey().equals("D")).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
- mapResults.forEach((key, value) -> System.out.println(key + ">>>>" + value));
- System.out.println(">>>>>>>Optional>>>>>>>");
- Optional<String> optional = Optional.of("hello");
- System.out.println(optional.isPresent());
- }
- @Test
- public void testEmployeeExample() {
- //anyMatch
- List<Employee> employeeList = generateData();
- boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
- System.out.println(isMatch);
- //allMatch
- boolean matched = employeeList.stream().allMatch(employee -> employee.getOffice().equals("London"));
- System.out.println(matched);
- //找出工资最高的
- Optional<Employee> employeeOptional = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
- System.out.println(employeeOptional);
- //找出工资最少的
- Optional<Employee> employee = employeeList.stream().min((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
- System.out.println(employee);
- //返回姓名列表
- List<String> names = employeeList.stream().map(c->c.getName()).collect(Collectors.toList());
- System.out.println(names);
- System.out.println(">>>>>>>>>>>");
- //List转化Map
- Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
- employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
- //统计办公室是New York的个数
- long officeCount = employeeList.stream().filter(c->c.getOffice().equals("New York")).count();
- System.out.println(officeCount);
- long salaryCount = employeeList.stream().filter(c->c.getSalary()>60000).count();
- System.out.println(salaryCount);
- //List转化为Set
- Set<String> officeSet = employeeList.stream().map(c->c.getOffice()).distinct().collect(Collectors.toSet());
- System.out.println(officeSet);
- Set<Integer> salarySet = employeeList.stream().map(c->c.getSalary()).distinct().collect(Collectors.toSet());
- System.out.println(salarySet);
- //查找办公室地点是New York的员工
- Optional<Employee> optionals = employeeList.stream().filter(c->c.getOffice().equals("New York")).findAny();
- System.out.println(optionals);
- System.out.println(">>>>>工资降序排序>>>>>");
- //按照工资的降序来列出员工信息
- List<Employee> sortSalaryEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
- System.out.println(sortSalaryEmployeeList);
- System.out.println(">>>>>姓名升序排序>>>>>");
- List<Employee> sortNameEmployeeList = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
- System.out.println(sortNameEmployeeList);
- System.out.println(">>>>获取工资最高的前2条员工信息");
- List<Employee> dispaly2EmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).limit(2).collect(Collectors.toList());
- System.out.println(dispaly2EmployeeList);
- System.out.println(">>>>获取平均工资");
- OptionalDouble averageSalary = employeeList.stream().mapToInt(c->c.getSalary()).average();
- System.out.println(averageSalary);
- System.out.println(">>>>获取工作地点的平均工资");
- OptionalDouble optionalDouble = employeeList.stream().filter(c->c.getOffice().equals("New York")).mapToInt(c->c.getSalary()).average();
- System.out.println(optionalDouble);
- System.out.println(">>>>>>Java8 Optional用法>>>>>>");
- Optional<String> stringOptional = Optional.of("test");
- System.out.println(stringOptional.get());
- Optional<String> isOptional = Optional.ofNullable("hello");
- System.out.println(isOptional.isPresent());
- System.out.println(isOptional.get());
- System.out.println(isOptional.orElse("0"));
- System.out.println(">>>>>>>>>>>>");
- //Optional<String> optionalVal = Optional.of(null);
- // System.out.println(optionalVal);
- Optional<String> optional = Optional.ofNullable("optional");
- System.out.println(optional);
- System.out.println(optional.isPresent());
- System.out.println(optional.get());
- System.out.println(optional.orElse("haha"));
- System.out.println(">>>>>>>>>>>>");
- Optional<Employee> employeeOptional_ = employeeList.stream().filter(c->c.getOffice().equals("New York")).findFirst();
- System.out.println(employeeOptional_);
1.Java8 新特性介绍
原文链接 https://my.oschina.net/chenxiaobian/blog/704421,https://www.cnblogs.com/hmdrzql/p/6354010.html
现在我们有一个需求:给一个user组成的list 按照user的年龄排序。实现不难,代码如下:
UserCompare是一个实现了Comprator的类
这种方法由于sort方法的第二个参数是Comparator 所以你要写一个实现类(我这里是UserCompare类),并且override该接口的实现方法。
java8提供了lambda来简化,有了lambda程序员从此不加班呀~
刚才那个Comparator的实现类以及内部若干代码就都省了,代之以lambda表达式。
另外,IntelliJ会提示你改成更好的写法
实现类里有多少代码,你就省了多少行代码。
高兴了半天,到底是什么原理呢?其实是java8新提供的语法糖。
我们打开java1.8 Comparator的定义,发现了类定义上面多了一个@FunctionalInterface
对,1.8多了一个概念就是FunctionalInterface,这个Comparator就是一个FunctionalInterface
有了这个注解,原来使用实现类的地方就可以代之以lambda表达式。
写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下:
- Lambda表达式
- 函数式接口
- Stream
- Optional
- Predicate
- Function
- Consumer
- Filter
- Map-Reduce
- 新的Date API
最核心的当然是函数式编程了,写代码非常简单,请看下面详细例子介绍
2.Java8 lambda使用总结-结合实例介绍
很多同学一开始接触Java8可能对Java8 Lambda表达式有点陌生,下面我将结合实例介绍Java8的使用 并与Java7进行比较:
基础类
- @Data
- @Builder
- @AllArgsConstructor
- @NoArgsConstructor
- public class Person {
- private int id;
- private String name;
- private String address;
- }
1.List操作
- public class ExampleList {
- private static List<String> items = new ArrayList<>();
- static {
- items.add("A");
- items.add("BC");
- items.add("C");
- items.add("BD");
- items.add("E");
- }
- public static void main(String[] args) {
- //Java8之前操作List
- for(String item:items){
- System.out.println(item);
- }
- //Java8 lambda遍历list
- items.forEach(c-> System.out.println(c));
- items.forEach(item->{
- if("C".equals(item)){
- System.out.println(item);
- }
- });
- System.out.println("--------");
- //先过滤
- items.stream().filter(s->s.contains("B")).forEach(c1-> System.out.println(c1));
- }
- }
2.Map操作
- public class ExampleMap {
- private static Map<String, Integer> items = new HashMap<>();
- static {
- items.put("A", 10);
- items.put("B", 20);
- items.put("C", 30);
- items.put("D", 40);
- items.put("E", 50);
- items.put("F", 60);
- }
- public static void main(String[] args) {
- //Java8之前遍历是这样遍历map
- for(Map.Entry<String,Integer> entry:items.entrySet()){
- System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
- }
- //Java8遍历map
- items.forEach((key,value)-> System.out.println("key:" + key + " value:" + value));
- }
- }
3.Groupingby操作
- /**
- *
- *Java8 Collectors.groupingBy and Collectors.mapping example
- */
- public class ExampleMapping {
- private static List<Person> personList = Lists.newArrayList();
- static {
- personList.add(Person.builder().id(10).address("apple").address("shanghai").build());
- personList.add(Person.builder().id(12).address("apple").address("wuhan").build());
- personList.add(Person.builder().id(16).address("apple").address("nanjing").build());
- }
- public static void main(String[] args) {
- //分组
- Map<String, List<Person>> collect = personList.stream().collect(Collectors.groupingBy(c -> c.getAddress()));
- System.out.println(collect);
- }
- }
4.List转换为Map
- public class ExampleListConvertMap {
- private static List<Person> personList = Lists.newArrayList();
- static{
- personList.add(Person.builder().id(20).name("zhangsan").address("shanghai").build());
- personList.add(Person.builder().id(30).name("lisi").address("nanjing").build());
- }
- public static void main(String[] args) {
- //Java8 List转换Map
- Map<Integer,Person> map_ = personList.stream().collect(Collectors.toMap((key->key.getId()),(value->value)));
- map_.forEach((key,value)-> System.out.println(key + ":" + value));
- Map<Integer, Person> mappedMovies = personList.stream().collect(
- Collectors.toMap(Person::getRank, Person::getData));
- }
- }
5.FilterMap操作
- public class ExampleFilterMap {
- private static Map<Integer,String> map_ = Maps.newHashMap();
- static{
- map_.put(1, "linode.com");
- map_.put(2, "heroku.com");
- map_.put(3, "digitalocean.com");
- map_.put(4, "aws.amazon.com");
- }
- public static void main(String[] args) {
- //before java iterator map
- String result = null;
- for(Map.Entry<Integer,String> entry:map_.entrySet()){
- if("heroku.com".equals(entry.getValue())){
- result = entry.getValue();
- }
- }
- System.out.println("Before Java 8 :" + result);
- //Java8 Map->Stream->Filter->String
- result = map_.entrySet().stream().
- filter(map->"heroku.com".equals(map.getValue()))
- .map(map->map.getValue())
- .collect(Collectors.joining());
- System.out.println("Java 8 :" + result);
- Map<Integer,String> collect = map_.entrySet().stream()
- .filter(c->c.getKey()==2)
- .collect(Collectors.toMap(p->p.getKey(),p->p.getValue()));
- System.out.println(collect);
- }
- }
6.Optional操作可以防止NullPointException
- Optional<String> optional = Optional.of("hello");
- System.out.println(optional.isPresent());//true
- System.out.println(optional.get());//hello
- System.out.println(optional.orElse("false"));
- optional.ifPresent((s)-> System.out.println(s.charAt(0)));//h
7.给出一个详细的例子
- @Data
- @Builder
- @AllArgsConstructor
- @NoArgsConstructor
- public class Employee {
- private String name;
- private int salary;
- private String office;
- }
- public class ExampleEmployee {
- private static List<Employee> employeeList = Lists.newArrayList();
- static{
- employeeList.add(Employee.builder().name("Matt").salary(5000).office("New York").build());
- employeeList.add(Employee.builder().name("Steve").salary(6000).office("London").build());
- employeeList.add(Employee.builder().name("Carrie").salary(20000).office("New York").build());
- employeeList.add(Employee.builder().name("Peter").salary(7000).office("New York").build());
- employeeList.add(Employee.builder().name("Pat").salary(8000).office("London").build());
- employeeList.add(Employee.builder().name("Tammy").salary(29000).office("Shanghai").build());
- }
- public static void main(String[] args) {
- //anyMatch
- boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
- System.out.println(isMatch);
- //返回所有salary大于6000
- boolean matched = employeeList.stream().allMatch(employee -> employee.getSalary()>4000);
- System.out.println(matched);
- //找出工资最高
- Optional<Employee> hightestSalary = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
- System.out.println(hightestSalary);
- //返回姓名列表
- List<String> names = employeeList.stream().map(employee -> employee.getName()).collect(Collectors.toList());
- System.out.println(names);
- //List转换成Map
- Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
- employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
- //统计办公室是New York的个数
- long officeCount = employeeList.stream().filter(employee -> employee.getOffice().equals("Shanghai")).count();
- System.out.println(officeCount);
- //List转换为Set
- Set<String> officeSet = employeeList.stream().map(employee -> employee.getOffice()).distinct().collect(Collectors.toSet());
- System.out.println(officeSet);
- //查找办公室地点是New York的员工
- Optional<Employee> allMatchedEmployees = employeeList.stream().filter(employee -> employee.getOffice().equals("New York")).findAny();
- System.out.println(allMatchedEmployees);
- //按照工资的降序来列出员工信息
- List<Employee> sortEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
- //按照名字的升序列出员工信息
- List<Employee> sortEmployeeByName = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
- System.out.println(sortEmployeeList);
- System.out.println("按照名字的升序列出员工信息:" + sortEmployeeByName);
- //获取工资最高的前2条员工信息
- List<Employee> top2EmployeeList= employeeList.stream()
- .sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary()))
- .limit(2)
- .collect(Collectors.toList());
- System.out.println(top2EmployeeList);
- //获取平均工资
- OptionalDouble averageSalary = employeeList.stream().mapToInt(employee->employee.getSalary()).average();
- System.out.println("平均工资:" + averageSalary);
- //查找New York
- OptionalDouble averageSalaryByOffice = employeeList.stream().filter(employee -> employee.getOffice()
- .equals("New York"))
- .mapToInt(employee->employee.getSalary())
- .average();
- System.out.println("New York办公室平均工资:" + averageSalaryByOffice);
- }
- }
8.Java8常见操作
- public class EmployeeTest {
- public static List<Employee> generateData() {
- return Arrays.asList(new Employee("Matt", 5000, "New York"),
- new Employee("Steve", 6000, "London"),
- new Employee("Carrie", 10000, "New York"),
- new Employee("Peter", 7000, "New York"),
- new Employee("Alec", 6000, "London"),
- new Employee("Sarah", 8000, "London"),
- new Employee("Rebecca", 4000, "New York"),
- new Employee("Pat", 20000, "New York"),
- new Employee("Tammy", 9000, "New York"),
- new Employee("Fred", 15000, "Tokyo"));
- }
- public static Map<String, Integer> generateMapData() {
- Map<String, Integer> items = Maps.newHashMap();
- items.put("A", 10);
- items.put("B", 20);
- items.put("C", 30);
- items.put("D", 40);
- items.put("E", 50);
- items.put("F", 60);
- return items;
- }
- @Test
- public void testEmployee() {
- List<Employee> results = generateData();
- //打印出名字是Steve的员工信息
- results.forEach(c -> {
- if (c.getName().equals("Steve")) {
- System.out.println(c);
- }
- });
- System.out.println("---------");
- //找出年薪超过6000的员工
- results.stream().filter(c -> c.getSalary() >= 60000).forEach(c -> System.out.println(c));
- System.out.println("--->>>>>>----");
- //java8遍历map
- Map<String, Integer> map_ = generateMapData();
- map_.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
- System.out.println("---->>>>分组>>>-----");
- //java8 分组操作
- Map<String, List<Employee>> groupMap = results.stream().collect(Collectors.groupingBy(c -> c.getOffice()));
- System.out.println(groupMap);
- System.out.println("---->>>>List转化为Map>>>----");
- //List转化Map
- Map<String, Object> map = results.stream().collect(Collectors.toMap(Employee::getName, Employee::getOffice));
- map.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
- System.out.println("---->>>>>>>----");
- Map<Integer, Employee> employeeMap = results.stream().collect(Collectors.toMap((key -> key.getSalary()), (value -> value)));
- employeeMap.forEach((key, value) -> System.out.println(key + "," + value));
- System.out.println("---->>遍历map>>>----");
- //打印出值大于30的map
- Map<String, Integer> resultMap = map_.entrySet().stream().filter(c -> c.getValue() > 30).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
- resultMap.forEach((key, value) -> System.out.println(key + "=" + value));
- System.out.println(">>>>>>>>>>>>>>>");
- //打印key=D的map
- Map<String, Integer> mapResults = map_.entrySet().stream().filter(c -> c.getKey().equals("D")).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
- mapResults.forEach((key, value) -> System.out.println(key + ">>>>" + value));
- System.out.println(">>>>>>>Optional>>>>>>>");
- Optional<String> optional = Optional.of("hello");
- System.out.println(optional.isPresent());
- }
- @Test
- public void testEmployeeExample() {
- //anyMatch
- List<Employee> employeeList = generateData();
- boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
- System.out.println(isMatch);
- //allMatch
- boolean matched = employeeList.stream().allMatch(employee -> employee.getOffice().equals("London"));
- System.out.println(matched);
- //找出工资最高的
- Optional<Employee> employeeOptional = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
- System.out.println(employeeOptional);
- //找出工资最少的
- Optional<Employee> employee = employeeList.stream().min((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
- System.out.println(employee);
- //返回姓名列表
- List<String> names = employeeList.stream().map(c->c.getName()).collect(Collectors.toList());
- System.out.println(names);
- System.out.println(">>>>>>>>>>>");
- //List转化Map
- Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
- employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
- //统计办公室是New York的个数
- long officeCount = employeeList.stream().filter(c->c.getOffice().equals("New York")).count();
- System.out.println(officeCount);
- long salaryCount = employeeList.stream().filter(c->c.getSalary()>60000).count();
- System.out.println(salaryCount);
- //List转化为Set
- Set<String> officeSet = employeeList.stream().map(c->c.getOffice()).distinct().collect(Collectors.toSet());
- System.out.println(officeSet);
- Set<Integer> salarySet = employeeList.stream().map(c->c.getSalary()).distinct().collect(Collectors.toSet());
- System.out.println(salarySet);
- //查找办公室地点是New York的员工
- Optional<Employee> optionals = employeeList.stream().filter(c->c.getOffice().equals("New York")).findAny();
- System.out.println(optionals);
- System.out.println(">>>>>工资降序排序>>>>>");
- //按照工资的降序来列出员工信息
- List<Employee> sortSalaryEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
- System.out.println(sortSalaryEmployeeList);
- System.out.println(">>>>>姓名升序排序>>>>>");
- List<Employee> sortNameEmployeeList = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
- System.out.println(sortNameEmployeeList);
- System.out.println(">>>>获取工资最高的前2条员工信息");
- List<Employee> dispaly2EmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).limit(2).collect(Collectors.toList());
- System.out.println(dispaly2EmployeeList);
- System.out.println(">>>>获取平均工资");
- OptionalDouble averageSalary = employeeList.stream().mapToInt(c->c.getSalary()).average();
- System.out.println(averageSalary);
- System.out.println(">>>>获取工作地点的平均工资");
- OptionalDouble optionalDouble = employeeList.stream().filter(c->c.getOffice().equals("New York")).mapToInt(c->c.getSalary()).average();
- System.out.println(optionalDouble);
- System.out.println(">>>>>>Java8 Optional用法>>>>>>");
- Optional<String> stringOptional = Optional.of("test");
- System.out.println(stringOptional.get());
- Optional<String> isOptional = Optional.ofNullable("hello");
- System.out.println(isOptional.isPresent());
- System.out.println(isOptional.get());
- System.out.println(isOptional.orElse("0"));
- System.out.println(">>>>>>>>>>>>");
- //Optional<String> optionalVal = Optional.of(null);
- // System.out.println(optionalVal);
- Optional<String> optional = Optional.ofNullable("optional");
- System.out.println(optional);
- System.out.println(optional.isPresent());
- System.out.println(optional.get());
- System.out.println(optional.orElse("haha"));
- System.out.println(">>>>>>>>>>>>");
- Optional<Employee> employeeOptional_ = employeeList.stream().filter(c->c.getOffice().equals("New York")).findFirst();
- System.out.println(employeeOptional_);
标签:map,stream,System,employeeList,使用,println,lambda,Java8,out 来源: https://www.cnblogs.com/coder-wzr/p/14410981.html