Java8 lambda使用总结-结合实例介绍
来源:互联网 发布:ipad同步软件 编辑:程序博客网 时间:2024/06/07 20:40
摘要: 1.Java8 新特性介绍 2.项目中应用
1.Java8 新特性介绍
原文链接 https://my.oschina.net/chenxiaobian/blog/704421
写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下:
Lambda表达式函数式接口StreamOptionalPredicateFunctionConsumerFilterMap-Reduce新的Date API
最核心的当然是函数式编程了,写代码非常简单,请看下面详细例子介绍
2.Java8 lambda使用总结-结合实例介绍
很多同学一开始接触Java8可能对Java8 Lambda表达式有点陌生,下面我将结合实例介绍Java8的使用 并与Java7进行比较:
基础类
@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic 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());//trueSystem.out.println(optional.get());//helloSystem.out.println(optional.orElse("false"));optional.ifPresent((s)-> System.out.println(s.charAt(0)));//h
7.给出一个详细的例子
@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic 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_); }
}
阅读全文
0 0
- Java8 lambda使用总结-结合实例介绍
- Java8 lambda表达式使用总结
- Java8 Lambda表达式介绍
- 《Java8 lambda表达式介绍》
- Java8 Lambda介绍
- java8之lambda总结
- Java8 Lambda简单使用
- java8中lambda的使用
- java8 lambda表达式的简单介绍
- java8 Lambda
- Java8 Lambda
- Java8 Lambda
- java8 lambda
- java8-lambda
- java8-lambda
- java8 Lambda
- java8中Lambda表达式的使用
- Android中的使用lambda(支持java8)
- C++ access specifiers
- 【LeetCode】238. Product of Array Except Self解题报告
- pixhawk PX4FMU和PX4IO最底层启动过程分析
- linux用户创建
- MySQL Join算法与调优白皮书
- Java8 lambda使用总结-结合实例介绍
- 小P寻宝记--好基友一起走(完全背包)
- vim快捷键
- Bootmem
- hdu red and black
- MFC实现excel的读写操作
- OpenCV 90°旋转
- ROS indigo安装完成后运行小乌龟示例程序
- matlab笔记(2)----矩阵及其运算