最近在开发中看到同事使用stream 进行集合的数据转换List<object> ->List<String>
List<object> --> Map<Long, object>,感觉十分简单方便,上网找了一下资料学习一下
记录一下我们常见用法
.stream() − 为集合创建串行流
1、List<Object> --> List<String>
//List<Object> --> List<String>
List<User> resultList = new ArrayList<>();
List<String> newList = resultList.stream().map(e -> e.getName()).collect(Collectors.toList());
// List<map> --> List<String>
List<String> contractIds = array.stream().map(m -> MapUtils.getString(m, "contractId").toString()).collect(Collectors.toList());
2、List<User> --> Map<Long, User>
List<User> --> Map<Long, User>
List<User> resultList = new ArrayList<>();
Map<Long, User> idToUser = resultList.stream().collect(Collectors.toMap(User::getId, (user -> user)));
3、List<Map<String, Object>> --> Map<String, Integer> countMap
List<user> --> Map<String, Integer> countMap
List<Map<String, Object>> reList = stdGoodsTempDao.queryCountByRegcardnm(paramMap);
Map<String, Integer> countMap = reList.stream().collect(Collectors.toMap(map -> (String) map.get("regcardnm"), (map -> (Integer) map.get("goodsCount"))));
// List<user> --> Map<String, Integer> countMap
Map<Integer, String> countMap = list.stream().collect(Collectors.toMap(e -> e.getId(), e -> e.getBillNum()));
4、.stream().parallel().forEach轻松实现多线程
List<StdRegcardTemp> lists=new ArrayList<>(10);
lists.stream().parallel().forEach(item -> { //具体处理 });
5、获取某个字段最大值的那条数据,
.stream().max(Comparator.comparing(Student::getRecord)).get();
Student student = stu.stream().max(Comparator.comparing(Student::getRecord)).get();
6、 list<object> --> list<object> 获取满足条件的返回
.filter( 获取type =1的数据
List<Cycle> cycleStream = cycleList.stream().filter(
cycle -> 1.equals(cycle.getType())).collect(Collectors.toList());
7、 list<object> --> list<Integer> 获取满足条件的数,并且取出指定字段
List<Integer> projectConfigIds = cycleList.stream().filter(
cycle -> "1".equals(cycle.getType()))
.map(Cycle::getId)
.collect(Collectors.toList());
8、修改object 属性的值,批量修改list 中对象的某个值
StdSubcodeBhs = StdSubcodeBhs.stream().peek(x -> x.setSubmitState(1)).collect(Collectors.toList());
9、list 去重
List newList = (List) list.stream().distinct().collect(Collectors.toList());
10、字段类型转换 List<Integer> --> List<String>
List<Integer> declareTypes = new ArrayList();
List<String> declareTypes1 = declareTypes.stream().map(String::valueOf).collect(Collectors.toList());
----以下是参考扩展
filter 使用参考这个文章,写的很好