2019-1-9后台代码学习SocialMember模块笔记

关于Lambda语法糖和stream流写法

==一般来讲以Example结尾的实体类是Entity(自动生成类)的对于增删查改条件查询的方法做的自动化生成的查询参数的生成 #9e9e9e==

1
2
3
4
5
6
7
List<SocialMemberPo> list = socialMemberMapext.queryMemberList(dto.getSocialId(), dto.getName(),
dto.getIdCardNumber(), dto.getTel(), dto.getRoomId());
list.stream().forEach(item -> {
if (Strings.isNotBlank(item.getSex())) {
item.setSex(item.getSex().equals("MALE") ? "男" : "女");
}
});
1
2
3
4
5
6
7
List<SocialMemberPo> list = socialMemberMapext.queryMemberList(dto.getSocialId(), dto.getName(),
dto.getIdCardNumber(), dto.getTel(), dto.getRoomId());
for (SocialMemberPo socialMemberPo : list) {
if (Strings.isNotBlank(socialMemberPo.getSex())) {
socialMemberPo.setSex(socialMemberPo.getSex().equals("MALE") ? "男" : "女");
}
}

可以看到前者使用Java 8 API中的Stream流的写法和Lambda表达式而后者就是传统的代码

==分析此代码可以看出 #800000==

在正常的普通代码中我们通过遍历foreach的写法查询list这个集合调用Strings^[具体可以参考如下String API https://logging.apache.org/log4j/2.0/log4j-api/apidocs/org/apache/logging/log4j/util/Strings.html]这个类的isNotBlank方法来判断是否传入的空白如果不是空白就通过get和set方法传出(在此处是通过对equal方法的调用和通过运算符的判断如果满足MALE则返回的是男否则女.而在前者中我们可以看到通过流的写法简化了通过调用list对象的流的forEach方法直接遍历原本的SocialMemberPo实体类然后通过Lambda函数式编程的思想通过item中间类直接操作get和set等方法借以简化代码

isNotBlank()和isNotEmpty()的区别**


1. null是没有地址的,可以理解为空指针,当对象在构建器初始化时,如果没有被显示赋于初值,那么默认会默认赋值为null
2. “”空字符串是一个String对象是有地址的,只是内容为空。

再比如下面这个代码

1
2
3
4
5
6
7
8
9
10
11
List<SupplierSyn> synList = supplierSynMapper.selectByExample(supplierSynExample);
if (synList.size() > 0) {
SupplierSyn supplierSyn = synList.get(0);
list.forEach(item -> {
if (supplierSyn.getSynSupplierList().equals(item.getSynedSupplier())) {
item.setSynStatus(SynStatusEnum.SYNCHRONIZED.name());
} else {
item.setSynStatus(SynStatusEnum.NOT_SYNCHRONIZED.name());
}
});
}

1
2
3
4
5
6
7
8
9
10
11
List<SupplierSyn> synList = supplierSynMapper.selectByExample(supplierSynExample);
if (synList.size() > 0) {
SupplierSyn supplierSyn = synList.get(0);
for (SocialMemberPo item : list) {
if (supplierSyn.getSynSupplierList().equals(item.getSynedSupplier())) {
item.setSynStatus(SynStatusEnum.SYNCHRONIZED.name());
} else {
item.setSynStatus(SynStatusEnum.NOT_SYNCHRONIZED.name());
}
}
}

可以轻易的看出前者使用流和Lambda表达式将item直接作为中间类的形式进行调用get和set方法传值和赋值然后通过list的forEach操作遍历循环。