Lambda在jdk1.8外面曾经很好用了,在这里不讲底层的实现,只有简略的用法,会持续补全。
首先一个list咱们要应用lambda的话,须要应用它的stream()办法,获取流,能力应用后续的办法。

根底类User.java

public class User {  public long userId;  public User() {  }  public User(long userId, String name, int age) {    this.userId = userId;    this.name = name;    this.age = age;  }  public String name;  public int 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;  }  public long getUserId() {    return userId;  }  public void setUserId(long userId) {    this.userId = userId;  }  @Override  public String toString() {    return "User{" +        "name='" + name + '\'' +        ", age=" + age +        ", userId=" + userId +        '}';  }  public void output() {    System.out.println("User{" +        "name='" + name + '\'' +        ", age=" + age +        ", userId=" + userId +        '}');  }}

1.遍历元素

应用foreach办法,其中s->外面的s指list外面的每一个元素,针对每一个元素都执行后续的办法。如果外面只有一句话,能够间接缩写foreach(n -> System.out.println(n));,如果须要执行的办法外面有两句或者多句须要执行的话,须要能够应用list.stream().forEach(s -> {System.out.println(s);});模式。

  // 遍历list(String)和对象  public static void foreachListString() {    List features = Arrays.asList("Lambdas", "Default Method", "Stream API",        "Date and Time API");    features.forEach(n -> System.out.println(n));    List<String> list = new ArrayList<>();    list.add("a");    list.add("b");    list.add("c");    // s代表的是外面的每一个元素,{}外面就是每个元素执行的办法,这个比拟容易了解    list.stream().forEach(s -> {      System.out.println(s);    });    // 解决对象    List<User> users = new ArrayList<>();    User user1 = new User();    user1.setAge(1);    user1.setName("user1");    user1.setUserId(1);    users.add(user1);    users.stream().forEach(s -> s.output());  }

2.转化外面的每一个元素

map是须要返回值的,s代表外面的每一个元素,return 解决后的返回值

public static void mapList() {    List<String> list = new ArrayList<>();    list.add("a");    list.add("b");    list.add("c");    List<String> list2 = new ArrayList<>();    // map代表从一个转成另一个,s代表外面的每一个值,{}代表针对每一个值的解决办法,如果是代码句子,则须要有返回值    // 返回值代表转化后的值,以下两种都能够    list2 = list.stream().map(s -> {      return s.toUpperCase();    }).collect(Collectors.toList());    list2.stream().forEach(s -> {      System.out.println(s);    });    list2 = list.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());    list2.stream().forEach(s -> {      System.out.println(s);    });  }

3.条件过滤筛选

应用filter函数,外面的表达式也是须要返回值的,返回值应该为boolean类型,也就是符合条件的就保留在list外面,不符合条件的就被过滤掉。

  // filter过滤  public static void filterList() {    List<String> list1 = new ArrayList<>();    List<String> list2 = new ArrayList<>();    list1.add("aasd");    list1.add("agdfs");    list1.add("bdfh");    list2 = list1.stream().filter(s -> {      return s.contains("a");    }).collect(Collectors.toList());    list2.stream().forEach(s -> {      System.out.println(s);    });  }

4.取出list外面的对象中的元素,返回一个特定的list

这个能够让咱们取出list汇合中的某一个元素,也是应用map即可。

  // list汇合中取出某一属性  public static void getAttributeList() {    List<User> list = new ArrayList<>();    User user1 = new User();    user1.setUserId(1);    user1.setName("James");    user1.setAge(13);    list.add(user1);    User user2 = new User();    user2.setUserId(2);    user2.setName("Tom");    user2.setAge(21);    list.add(user2);    // 两种书写形式都能够,一个是map外面,应用每一个实例调用User类的getName办法返回值就是转化后的值。    List<String> tableNames = list.stream().map(User::getName).collect(Collectors.toList());    tableNames.stream().forEach(s -> {      System.out.println(s);    });    List<String> tableNames1 = list.stream().map(u -> u.getName()).collect(Collectors.toList());    tableNames1.stream().forEach(s -> {      System.out.println(s);    });  }

5.分组

能够依据某一个属性来分组,取得map

  // 分组,每一组都是list  public static void groupBy() {    List<User> userList = new ArrayList<>();// 寄存user对象汇合    User user1 = new User(1, "张三", 24);    User user2 = new User(2, "李四", 27);    User user3 = new User(3, "王五", 21);    User user4 = new User(4, "张三", 22);    User user5 = new User(5, "李四", 20);    User user6 = new User(6, "王五", 28);    userList.add(user1);    userList.add(user2);    userList.add(user3);    userList.add(user4);    userList.add(user5);    userList.add(user6);    //依据name来将userList分组    Map<String, List<User>> groupBy = userList.stream().collect(Collectors.groupingBy(User::getName));    System.out.println(groupBy);  }

6.对某一个属性进行求和

比方咱们须要对年龄进行求和,能够应用mapToInt(),外面参数应该应用类名:办法名,最初须要应用sum()来求和。

public static void getSum(){    List<User> userList = new ArrayList<>();//寄存user对象汇合    User user1 = new User(1, "qw", 24);    User user2 = new User(2, "qwe", 27);    User user3 = new User(3, "aasf", 21);    User user4 = new User(4, "fa", 22);    User user5 = new User(5, "sd", 20);    User user6 = new User(6, "yr", 28);    userList.add(user1);    userList.add(user2);    userList.add(user3);    userList.add(user4);    userList.add(user5);    userList.add(user6);    // sum()办法,则是对每一个元素进行加和计算    int totalAge = userList.stream().mapToInt(User::getAge).sum();    System.out.println("和:" + totalAge);  }

7.将list转化成map

比方咱们须要list外面的对象的id和这个对象对应,那就是须要转换成map。须要在collect()办法外面应用Collectors的toMap()办法即可,参数就是key和value。

 public static void listToMap(){    List<User> userList = new ArrayList<>();    User user1 = new User(1, "12", 22);    User user2 = new User(2, "21", 17);    User user3 = new User(3, "a", 11);    User user4 = new User(4, "a", 22);    User user5 = new User(5, "af", 22);    User user6 = new User(6, "fa", 25);    userList.add(user1);    userList.add(user2);    userList.add(user3);    userList.add(user4);    userList.add(user5);    userList.add(user6);    Map<Long,User> userMap = userList.stream().collect(Collectors.toMap(User::getUserId, user -> user));    System.out.println("toMap:" + userMap.toString());  }

此文章仅代表本人(本菜鸟)学习积攒记录,或者学习笔记,如有侵权,请分割作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有谬误之处,还望指出,感激不尽~

技术之路不在一时,山高水长,纵使迟缓,驰而不息。

公众号:秦怀杂货店