Java Lambda表現の一般的な使用

4176 ワード

Java 8以降のLambda表現はJavaの一般的な使用によく使われていると信じられていますが、この文章では古典的な使用シーンを記録して共有し、皆さんの役に立つことを望んでいます.また、エレガントさが足りないと感じている人は、コメントエリアで意見やアドバイスをすることもできますよ.
  • リスト変換タイプListto List
  • eg:围绕redis的基础设施,把价格换成jso名单。String CSDN_USER=“csdn_user_”; //伝統方式 List lists = new ArrayList(); Set keys = stringRedisTemplate.keys(CSDN_USER + "*"); keys.stream().forEach(k -> { lists.add(JSONObject.parseObject(stringRedisTemplate.opsForValue().get(k))); }); //lambda方式 List collect = stringRedisTemplate.keys(CSDN_USER + "*") .stream() .map(k -> JSONObject.parseObject(stringRedisTemplate.opsForValue().get(k))) .collect(Collectors.toList());
  • リスト一致指向性要素値リストA.name=包括XX的要素怎么样?
  • eg:克埃利斯特有没有包含互联网吗?LambdaQueryWrapper wrapQuery=new LambdaQueryWrapper<>(); wrapQuery.eq(TActor::getStatus, SocketFlow.Status.OK); List list = actorService.list(wrapQuery); Long orgId = 0L; //伝統 AtomicBoolean flag = new AtomicBoolean(false); list.forEach(a -> { if (orgId.equals(a.getId())) { flag.set(true); return; } }); //Lambda boolean b = list.stream().anyMatch(a -> orgId.equals(a.getId()));
  • リストをmap Listto Map
  • 改变 List list = appInfoMapper.selectList(quaryWrapper); //この方法は汎用的なリストでなければなりません。パラメータなしではlambda要素のタイプを特定できません。 Map appInfoMap = list.stream(). collect(Collectors.toMap(act -> act.getAppId(), act -> act)); 上記の欠点は明確で、返されたkey値は固定されており、以下は一般的にリスターをターゲット・Map集合に変える方法である。 @Override public Map getMap(String field, QueryWrapper quaryWrapper) throws IntrospectionException { List list = appInfoMapper.selectList(quaryWrapper); Class clazz = AppInfo.class; PropertyDescriptor propertyDescriptor = new PropertyDescriptor(field, clazz); //lambdaでkeyが同じ場合は異常になるので注意 Map collect = list.stream().collect(Collectors.toMap(act -> { try { return (propertyDescriptor.getReadMethod().invoke(act)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; }, act -> act)); return collect; }
  • 取り出しリスタA.name=XX的要素名单:
  • public List filter(String field, Object target, QueryWrapper quaryWrapper) throws IntrospectionException {
    List list = appInfoMapper.selectList(quaryWrapper);
    PropertyDescriptor propertyDescriptor = new PropertyDescriptor(field, AppInfo.class);
    List collect = list.stream().filter(a -> {
    try {
    return target.equals(propertyDescriptor.getReadMethod().invoke(a));
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    e.printStackTrace();
    }
    return false;
    }).collect(Collectors.toList());
    return collect;
    }
    名单的统计 public IntSummaryStatistics statistics(String field, QueryWrapper quaryWrapper) throws IntrospectionException { List list = appInfoMapper.selectList(quaryWrapper); //PropertyDescriptor propertyDesc = new PropertyDescriptor(field, AppInfo.class); //Method getMethod = propertyDesc.getReadMethod(); IntSummaryStatistics sum = list.stream().mapToInt(a -> 1).summaryStatistics(); return sum; }
  • リストリストto List
  • インストールする.Map>borrowRepayLogMap=borrowRepayLogList.stream().collectors.groupingBy(BorrowRepayLog::getRepayId); 里斯特克拉斯变换的几个操作QueryWrapper queryWrapper=new QueryWrapper(); if (StringUtils.isNotBlank(nickName)) { queryWrapper.like("nick_name", nickName); } if (StringUtils.isNotBlank(mobile)) { queryWrapper.like("contact_number", mobile); } List userlist = usersService.list(queryWrapper); List list = userlist.stream().filter(e -> e.getSex() == 1).collect(Collectors.toList()); List openIds = list.stream().map(users -> users.getOpenId()).collect(Collectors.toList()); List tacts = list.stream().map(users -> users.build(1)).collect(Collectors.toList()); DozerBeanMapper mapper = new DozerBeanMapper(); List> aList = list.stream().map(e -> TActor.class).collect(Collectors.toList()); List collect = list.stream().map(e -> new TActor()).collect(Collectors.toList()); Optional firstUser = list.stream().findFirst(); TActor actor = new TActor(); BeanUtils.copyProperties(actor, firstUser.get()); 我不能解决小伙伴的问题,留下传言给我做好,工作时间我可以在里亚时间在线上打开线上讨论,欢迎着振兴伦加的情况。