2019年5月20日记
可以参考:https://blog.csdn.net/chaoer89/article/details/52389458/
需求:一个集合需要对其根据相同属性值进行分类,如图需要分为3个集合,根据questionId属性。采用lambda表达式实现
如下的代码是自己在代码中模拟的数据
package com.lamba;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.junit.Test;
public class Lamba {
/**
* 分组,过滤list中用户的age,去重;
*/
@Test
public void lambaforEach(){
List<User> list = new ArrayList<>();
User user1 = new User("张三",15,"男");
User user2 = new User("李四",22,"男");
User user3 = new User("张三",22,"男");
User user4 = new User("赵六",15,"男");
User user5 = new User("李世民",28,"男");
User user6 = new User("杨贵妃",18,"女");
User user7 = new User("李四",15,"女");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
list.add(user6);
list.add(user7);
Set<Integer> set = new HashSet<Integer>();
list.stream().forEach(User ->set.add(User.getAge()));
System.out.println(set);
}
/**
* 2、将List分组:List里面的对象元素,以某个属性来分组
*/
@Test
public void lambagroupBy(){
List<User> list = new ArrayList<>();
User user1 = new User("张三",15,"男");
User user2 = new User("李四",22,"男");
User user3 = new User("张三",22,"男");
User user4 = new User("赵六",15,"男");
User user5 = new User("李世民",28,"男");
User user6 = new User("杨贵妃",18,"女");
User user7 = new User("李四",15,"女");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
list.add(user6);
list.add(user7);
//根据name来将userList分组
Map<String, List<User>> groupBy = list.stream().collect(Collectors.groupingBy(User::getName));
System.out.println(groupBy);
}
/**
* 3、list转为Map
*/
@Test
public void lambatoMap(){
List<User> list = new ArrayList<>();
User user1 = new User("张三",15,"男");
User user2 = new User("李四",22,"男");
User user3 = new User("张三",22,"男");
User user4 = new User("赵六",15,"男");
User user5 = new User("李世民",28,"男");
User user6 = new User("杨贵妃",18,"女");
User user7 = new User("李四",15,"女");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
list.add(user6);
list.add(user7);
//ID为key,转为Map
Map<Integer, User> collect = list.stream().collect(Collectors.toMap(User::getAge, a -> a,(k1, k2)->k1));
System.out.println(collect);
}
/**
* 4、过滤:从集合中过滤出来符合条件的元素
*/
@Test
public void lambafilter(){
List<User> list = new ArrayList<>();
User user1 = new User("张三",15,"男");
User user2 = new User("李四",22,"男");
User user3 = new User("张三",22,"男");
User user4 = new User("赵六",15,"男");
User user5 = new User("李世民",28,"男");
User user6 = new User("杨贵妃",18,"女");
User user7 = new User("李四",15,"女");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
list.add(user6);
list.add(user7);
//取出名字为张三的用户
List<User> filterList = list.stream().filter(user -> user.getName().equals("张三")).collect(Collectors.toList());
System.out.println(filterList);
}
/**
* 5、求和:将集合中的数据按照某个属性求和
*/
@Test
public void lambamapToInt(){
List<User> list = new ArrayList<>();
User user1 = new User("张三",15,"男");
User user2 = new User("李四",22,"男");
User user3 = new User("张三",22,"男");
User user4 = new User("赵六",15,"男");
User user5 = new User("李世民",28,"男");
User user6 = new User("杨贵妃",18,"女");
User user7 = new User("李四",15,"女");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
list.add(user6);
list.add(user7);
int totalAge = list.stream().mapToInt(User::getAge).sum();
System.out.println("和:" + totalAge);
}
}
package com.lamba;
public class User {
private String name;
private int age;
private String sex;
public User(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}