List<User> userList = userService.getUserList();
一. 将装有User对象的List集合转为一个Map集合,key 为 id,值为对象本身;当然,key和值由你的需求来定;e指代当前User对象;
Map<String, User> collect = userList.stream().collect(Collectors.toMap(User::getId, e -> e)); Map<String, String> collect1 = userList.stream().collect(Collectors.toMap(User::getId, e -> e.getName()));
二. 将集合中的对象按照对象的属性分组成一个Map集合,这里按照User的id来分组
Map<String, List<User>> stringListMap = userList.stream().collect(Collectors.groupingBy(User::getId));
三. 获取集合中所有对象的某个属性值转为一个集合并去重,这里以id为例
List<String> userIds = userList.stream().map(User::getId).distinct().collect(Collectors.toList());
四.针对对象的熟悉,过滤求和
Integer collect = list.stream().filter(e->e.getScore() != null).collect(Collectors.summingInt(User::getScore)); List<String> collect1 = list.stream().filter(e->e.getName() != null).map(User::getName).collect(Collectors.toList());
五.规约,字符串拼接
public static void main(String[] args) { List<User> userList = new ArrayList<>(); User user = new User(); user.setId("1"); user.setName("李白"); user.setScore(null); userList.add(user);
代码示例
import java.util.*; import java.util.function.*; public class PredicateTest2 { public static void main(String[] args) { // 创建books集合、为books集合添加元素的代码与前一个程序相同。 Collection books = new HashSet(); books.add(new String("轻量级Java EE企业应用实战")); books.add(new String("疯狂Java讲义")); books.add(new String("疯狂iOS讲义")); books.add(new String("疯狂Ajax讲义")); books.add(new String("疯狂Android讲义")); // 统计书名包含“疯狂”子串的图书数量 System.out.println(calAll(books , ele->((String)ele).contains("疯狂"))); // 统计书名包含“Java”子串的图书数量 System.out.println(calAll(books , ele->((String)ele).contains("Java"))); // 统计书名字符串长度大于10的图书数量 System.out.println(calAll(books , ele->((String)ele).length() > 10)); // 使用Lambda表达式(目标类型是Predicate)过滤集合 books.removeIf(ele -> ((String)ele).length() < 10); System.out.println(books); } public static int calAll(Collection books , Predicate p) { int total = 0; for (Object obj : books) { // 使用Predicate的test()方法判断该对象是否满足Predicate指定的条件 if (p.test(obj)) { total ++; } } return total; }