一、stream().filter()的用法
stream.filter一般适用于list集合,主要作用就是模拟sql查询,从集合中查询想要的数据。filter里面的参数user是指集合里面的每一项
具体测试代码如下,相信看起来非常简单!
/** * @author DBC * @date 2022/4/27 11:19 */ public class Test { public static void main(String[] args) { List<User> list = new ArrayList<>(); //定义三个用户对象 User user1 = new User(); user1.setUsername("dbc"); user1.setPassword("1111111111"); User user2 = new User(); user2.setUsername("奥特曼"); user2.setPassword("222222222"); User user3 = new User(); user3.setUsername("猪头"); user3.setPassword("33333333"); User user4 = new User(); user4.setUsername("鸭头"); user4.setPassword("222222222"); //添加用户到集合中 list.add(user1); list.add(user2); list.add(user3); //在集合中查询用户名为huxiansen的集合 List<User> userList = list.stream().filter(user -> "dbc".equals(user.getUsername())).collect(Collectors.toList()); //在集合中查询出第一个用户密码为123456的用户 Optional<User> user = list.stream().filter(userTemp -> "222222222".equals(userTemp.getPassword())).findFirst(); System.out.println(userList); System.out.println(user); } }
控制台输出
[User{username='dbc', password='1111111111'}] Optional[User{username='奥特曼', password='222222222'}]
二、将一个list转换成一个由id为key,item为value的map集合
ConcurrentMap<Long, GbDataFamilyIntegration> gbDataFamilyIntegrationMap = dataFamilyIntegrations.parallelStream().collect (Collectors.toConcurrentMap(GbDataFamilyIntegration::getFamilyCode, GbDataFamilyIntegration -> GbDataFamilyIntegration));
三、将一个列表转换为一个由自定义key,以列表为value的map,具体如下
// 列表转map Map<Integer,List<ProjectFiles>> stateMap = filesList .stream().collect(Collectors.groupingBy(ProjectFiles::getProjectStatus));
四、获得所有的id列表
// 获取所有需要查询的id List<Long> questionnaireIdList = questionnaireInfoDOPage.getRecords().stream().map(QuestionnaireInfoDO::getId).collect(Collectors.toList());
五、从一个对象数组中通过一些规则取出想要的map
Map<Integer, ProjectFilesVO> recordIdMap = filesVOList .stream().distinct().collect(Collectors.toMap(ProjectFilesVO::getProjectStatus, Function.identity(),(v1,v2)->v1)); Map<Integer, ProjectFilesVO> recordIdMap = filesVOList .stream().distinct().collect(Collectors.toMap(ProjectFilesVO::getProjectStatus, Function.identity());
六、stream.filter进阶用法
自定义过滤数组,相当于sql中的where
resultLists = populationIncomeItemVOPage .parallelStream().filter(item -> filterData(item, householderIdcard, householderName)).collect(Collectors.toList());
// 自定义过滤器 private boolean filterData(PovertyMonitoringHouseholdSectionVO item, String getHouseholderIdcard, String getHouseholderName) { boolean one = true; boolean two = true; if (StrUtil.isNotBlank(getHouseholderIdcard)) { one = item.getHouseholderIdcard().equals(getHouseholderIdcard); } if (StrUtil.isNotBlank(getHouseholderName)) { two = item.getHouseholderName().equals(getHouseholderName); } return one && two; }
过滤null值
.filter(Objects::nonNull)
七、数组金额汇总
LongSummaryStatistics summaryNoRegister = resultCityFourList.stream().collect(Collectors.summarizingLong(StatisticsPropertyInfoDO::getNoRegisterAssetsProject)); BigDecimal originalValue = resultCityFourList.stream() .map(StatisticsPropertyInfoDO::getOriginalValue) .reduce(BigDecimal.ZERO, BigDecimal::add) .setScale(6, BigDecimal.ROUND_HALF_UP);
本文作者为DBC,转载请注明。