介绍Steam
概念:流就是通过 表达式来描述 我们遍历集合、数组 时需要对数组进行操作的表达。
听上去比较拗口,举个例子:我们有一个对象List<User>
我们需要把他转为 Map<Long,User>
不使用流写法
public static void main(String[] args) {
List<SysUser> list =new ArrayList<>();
//TODO 省略数据填充
Map<Long,SysUser> userMap = new HashMap<>();
for(SysUser user:list){
userMap.put(user.getUserId(),user);
}
}
使用流的写法
public static void main(String[] args) {
List<SysUser> list =new ArrayList<>();
//TODO 省略数据填充
Map<Long,SysUser> userMap =
list.stream().collect(Collectors.toMap(SysUser::getUserId,sysUser -> sysUser));
}
总结2总写法效果完全一致,复杂度越高 steam对于代码的可读性、简洁性、可拓展性越高。
常用的Steam写法
获取List<SysUser>中所有ID
public static void main(String[] args) {
List<SysUser> list =new ArrayList<>();
//TODO 省略数据填充
List<Long> ids =
list.stream().map(SysUser::getUserId).collect(Collectors.toList());
}
List对象转Map
public static void main(String[] args) {
List<SysUser> list =new ArrayList<>();
//TODO 省略数据填充
Map<Long,SysUser> userMap =
list.stream().collect(Collectors.toMap(SysUser::getUserId,user -> user));
}
List<对象>分组后转为Map<List<对象>>
public static void main(String[] args) {
List<SysUser> list =new ArrayList<>();
//TODO 省略数据填充
//通过sex分组
Map<String,List<SysUser>> userMap
=list.stream().collect(Collectors.groupingBy(user -> user.getSex()));
}
for循环
public static void main(String[] args) {
List<SysUser> list =new ArrayList<>();
//TODO 省略数据填充
list.stream().forEach(item->item.setSex("0"));
list.stream().forEach(item->{
item.setSex("0");
item.setNickName("AAA");
});
}
Long[]转List<Long>
public Map<Long, SysContractTemplate> selectByIds(Long... ids) {
List<Long> longList = Arrays.stream(ids).collect(Collectors.toList());
return selectByIds(longList);
}