jdk1.8 Lambda表达式常用操作
常见操作如下:
//无返回值,forEach循环打印指定字段
public static void forOutList(List<User> list) {
list.forEach(User -> System.out.println("hello," + User.getUsername()));
}
//重新封装集合数据
public static void initList(List<User> list){
List<User> userList = list.stream().map(User ->
new User(User.getUserid(), User.getWorkid(),User.getUsername())).collect(Collectors.toList());
}
//集合过滤
public static void filterList(List<User> list){
//过滤出集合中 用户名 字段包含字母 g,的所有数据列表
List<User> filterList = list.stream().filter(User -> User.getUsername().contains("g")).collect(Collectors.toList());
//过滤出集合中 用户id 字段数值大于 6,的所有数据列表
List<User> filterList = list.stream().filter(User -> Integer.valueOf(User.getUserid()) > 6).collect(Collectors.toList());
}
//排序
public static void sortList(List<User> list){
//按username排序
List<User> sortList = list.stream().sorted((User1,User2) -> User1.getUsername().compareTo(User2.getUsername())).collect(Collectors.toList());
}
//多条件排序
public static void multiSortList(List<User> list){
list.sort(Comparator.comparing(User::getUserid).thenComparing(User::getUsername));
}
//倒序
public static void reversedSortList(List<User> list){
//第一种写法,按单个字段排序,再执行集合倒序
Comparator<User> comparator = (User1,User2) -> User1.getUsername().compareTo(User2.getUsername());
list.sort(comparator.reversed());
//第二种写法(更简洁)
list.sort(Comparator.comparing(User::getUserid).reversed());
}
//多条件倒序
public static void multiReversedSortList(List<User> list){
list.sort(Comparator.comparing(User::getUserid).thenComparing(User::getUsername).reversed());
}
//集合分组
public static void groupByList(List<User> list){
//线程非安全分组
Map<String,List<User>> groupByMap = list.stream().collect(Collectors.groupingBy(User::getWorkid));
//线程安全分组
ConcurrentMap<String,List<User>> groupByConcurrentMap = coinDetailMonthVos.stream().collect(Collectors.groupingByConcurrent(User::getWorkid));
}
//获取集合指定列最小、最大值(这里以 日期字段 为例)
public static void multiSortList(List<User> list){
LocalDateTime minValue = list.parallelStream().map(User::getTime).min(Comparator.comparing(i -> i)).get();
LocalDateTime maxValue = list.parallelStream().map(User::getTime).max(Comparator.comparing(i -> i)).get();
}
//基础数据类型求: 和、最大值、最小值、平均值(这里以 用户id为例)
public static void maxByList(List<User> list){
list.stream().mapToInt(User::getUserid).sum();
OptionalInt optional = list.stream().mapToInt(User::getUserid).max();
OptionalInt optional = list.stream().mapToInt(User::getUserid).min();
OptionalDouble optionalDouble = list.stream().mapToInt(User::getUserid).average();
}
//List转map
public static void listToMap(List<User> list){
//第一种,用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2,这里的value都是代指 “对象” 类型
Map<Integer,User> map = list.stream().collect(Collectors.toMap(User::getUserid,User -> User, (k1, k2) -> k1));
//第二种
Map<Integer,User> collect = list.stream().collect(Collectors.toMap(User::getUserid, Function.identity()));
}
//map转list
public static void mapToList(Map<Integer,String> map){
List<User> list = map.entrySet().stream().sorted(Comparator.comparing(key -> key.getKey())).map(key -> new User(Integer.valueOf(key.getKey()),key.getValue(),key.getValue())).collect(Collectors.toList());
}
//字符串转list
public static void stringToList(String str){
//不需要处理
List<String> list = new ArrayList<>(Arrays.asList(str.split(",")));
//需要处理
List<String> list = Arrays.asList(str.split(",")).stream().map(string -> String.valueOf(string)).collect(Collectors.toList());
}
//用户名以逗号拼接
public static void joinStringValueByList(List<User> list){
list.stream().map(User::getUsername).collect(Collectors.joining(","));
}
//功能描述 分组统计
public static void countByList(List<User> list){
Map<String, Long> map = list.stream().collect(Collectors.groupingBy(User::getWorkid,Collectors.counting()));
}