1、Java判断两个集合是否具有交集(三种方法)
package com.interfaces.facade;
import cn.hutool.core.collection.CollectionUtil;
import org.apache.commons.collections.CollectionUtils;
import java.util.Collections;
import java.util.Arrays;
import java.util.List;
/**
* @Author: CGQ
*/
public class Demo {
public static void main(String[] args) {
List<String> aList = Arrays.asList("a");
List<String> bList = Arrays.asList("b", "c");
List<String> cList = Arrays.asList("a");
//1.Collections.disjoint() true为无交集 false为有交集
if (Collections.disjoint(aList, aList)) System.err.println("无交集");
//2.CollectionUtils.containsAny() true为有交集 false为无交集
if (CollectionUtils.containsAny(aList, cList)) System.err.println("有交集");
//3.CollectionUtil.containsAny() true为有交集 false为无交集
if (CollectionUtil.containsAny(aList, bList)) System.err.println("有交集");
}
}
2、Stream流多条件key分组函数
package com.interfaces.facade;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Author: CGQ
*/
public class Demo {
public static void main(String[] args) {
List<User> userList = Arrays.asList(User.builder().userId("1").userName("admin").age("1").build());
//进行多条件分组函数 条件:userId,userName,age 3个字段创建为分组的key
Function<User, List<Object>> userKey = user -> Arrays.asList(user.getUserId(), user.getUserName(), user.getAge());
//将用户集合按照之前创建的userKey当做分组函数的key进行分组
Map<List<Object>, List<User>> userMap = userList.stream().collect(Collectors.groupingBy(userKey, Collectors.toList()));
userList.stream().forEach(e -> {
//根据userId,userName,age 3个字段组的key来进行数据获取
List<User> users = userMap.get(Arrays.asList(e.getUserId(), e.getUserName(), e.getAge()));
System.err.println(users);
});
}
}
3、Stream流单条件key分组函数(三种方法)
package com.interfaces.facade;
import com.interfaces.vo.User;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Author: CGQ
*/
public class Demo {
public static void main(String[] args) {
List<User> userList = Arrays.asList(User.builder().userId("1").userName("admin").age("1").build());
//将用户集合按照userId进行分组 分组value为集合 此方法适用与集合中含多个相同主键ID的集合分组value值为对象集合时使用
Map<String, List<User>> userMap = userList.stream().collect(Collectors.groupingBy(User::getUserId));
//将用户集合按照userId进行分组 分组value为对象 此方法适用与集合中主键ID唯一的集合分组且value值为某个对象时使用
Map<String, User> onlyUserMap = userList.stream().collect(Collectors.toMap(User::getUserId, Function.identity()));
//将用户集合按照userId进行分组 分组value为用户名称(可为对象中任一已字段) 此方法适用与集合中主键ID唯一的集合分组且value值为对象中某一字段时使用
Map<String, String> userNameMap = userList.stream().collect(Collectors.toMap(User::getUserId, User::getUserName));
userList.stream().forEach(e -> {
//根据userId将用户集合按照userId进行分组 分组value为集合
List<User> users = userMap.get(e.getUserId());
System.err.println(users);
//根据userId将用户集合按照userId进行分组 分组value为对象
User user = onlyUserMap.get(e.getUserId());
System.err.println(user);
//根据userId将用户集合按照userId进行分组 分组value为用户名称(可为对象中任一已字段)
String userName = userNameMap.get(e.getUserId());
System.err.println(userName);
});
}
}
4、Stream流Filter()函数过滤获取结果集(orElse()函数)
package com.interfaces.facade;
import com.interfaces.vo.User;
import java.util.Arrays;
import java.util.List;
/**
* @Author: CGQ
*/
public class Demo {
public static void main(String[] args) {
List<User> userList = Arrays.asList(User.builder().userId("1").userName("admin").age("1").build());
String userName = "adminErr";
//根据用户名称获取用户信息 orElse()函数获取不到对应数据返回默认值(可防止空指针异常)
User user = userList.stream().filter(userVO -> userName.equals(userVO.getUserName())).findFirst().orElse(User.builder().build());
System.err.println(user);
//根据用户名称获取用户信息中某字段 orElse()函数获取不到对应数据返回默认值(可防止空指针异常)
String userId = userList.stream().filter(userVO -> userName.equals(userVO.getUserName())).findFirst().orElse(User.builder().build()).getUserId();
System.err.println(userId);
}
}
5、Stream流Map()映射函数方法集
package com.interfaces.facade;
import com.interfaces.vo.User;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.interfaces.vo.UserVO;
import org.springframework.beans.BeanUtils;
/**
* @Author: CGQ
*/
public class Demo {
public static void main(String[] args) {
List<User> userList = Arrays.asList(User.builder().userId("1").userName("admin").age("1").build());
//获取集合中的某字段 User::getUserId
List<String> userIdList = userList.stream().map(User::getUserId).collect(Collectors.toList());
System.err.println(userIdList);
//获取集合中对应条件数据并转换数据类型输出 List<User> --> List<UserVO>
List<UserVO> userVO = userList.stream().map(user -> {
UserVO userVOs = UserVO.builder().build();
if (user.getUserName().equals("admin")) {
BeanUtils.copyProperties(user, userVOs);
}
return userVOs;
}).collect(Collectors.toList());
System.err.println(userVO);
//获取集合中的某字段并转换数据类型 BigDecimal类型
List<BigDecimal> bigDecimalList = userList.stream().map(User::getAge).map(BigDecimal::new).collect(Collectors.toList());
System.err.println(bigDecimalList);
//获取集合中的某字段并转换数据类型 Double类型
List<Double> doubleList = userList.stream().map(User::getAge).map(Double::new).collect(Collectors.toList());
System.err.println(doubleList);
//获取集合中的某字段并转换数据类型 Integer类型
List<Integer> integerList = userList.stream().map(User::getAge).map(Integer::new).collect(Collectors.toList());
System.err.println(integerList);
//获取集合中的某字段并转换数据类型 String类型
List<String> stringList = userList.stream().map(User::getAge).map(String::new).collect(Collectors.toList());
System.err.println(stringList);
//获取集合中的某字段并转换数据类型并进行求和(空自动求和为 0) BigDecimal类型为精度类型 故计算时常用BigDecimal类型
BigDecimal summation = userList.stream().map(User::getAge).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
System.err.println(summation);
}
}
后续会持续更新!!!
后续会持续更新!!!