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的要素名单: リストリスト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());
我不能解决小伙伴的问题,留下传言给我做好,工作时间我可以在里亚时间在线上打开线上讨论,欢迎着振兴伦加的情况。
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; }