都2020年了,你还不会写简洁的Java代码!
使用Google Guava依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
创建一个list集合并赋值
最原始的办法:
List<String> stringList = new ArrayList<>();
stringList.add("jack");
stringList.add("pony");
stringList.add("ekko");
简单改造:
List<String> stringList2 = new ArrayList<String>(4) {{
add("jack");
add("pony");
add("ekko");
}};
终极改造:
List<String> stringList3 = ImmutableList.of("jack", "pony", "ekko");
去除list中的空值
一般做法:
List<String> nameList = new ArrayList<>();
List<String> noNullList = new ArrayList<>();
nameList.add("jack");
nameList.add("pony");
nameList.add("ekko");
nameList.add(null);
for (String o : stringList) {
if (o != null) {
noNullList.add(o);
}
}
使用lamda
简化后的写法:
List<String> noNullListFun = nameList
.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
list中的值求和
原始做法:
List<BigDecimal> numList = new ArrayList<BigDecimal>(10) {{
add(BigDecimal.valueOf(111L));
add(BigDecimal.valueOf(8888.22));
add(BigDecimal.valueOf(333.22));
add(BigDecimal.valueOf(857857.22));
add(BigDecimal.valueOf(5331.22));
}};
BigDecimal total = BigDecimal.ZERO;
for (BigDecimal num : numList) {
total = total.add(num);
}
System.out.println(total);
简化一下:
List<BigDecimal> numListSimple = ImmutableList.of(BigDecimal.valueOf(111L)
, BigDecimal.valueOf(8888.22), BigDecimal.valueOf(333.22)
, BigDecimal.valueOf(857857.22), BigDecimal.valueOf(5331.22));
// 求和
BigDecimal totalNum = BigDecimal.valueOf(numListSimple.stream().mapToDouble(BigDecimal::doubleValue).sum());
判断值是否为空
原始写法:
public static String getUserName() {
return null;
}
// 模拟调用服务
String username = getUserName();
String res;
if (username != null) {
res = username;
} else {
res = "游客";
}
简化:
String userName = Optional.ofNullable(username).orElse("游客");
System.out.println(userName);
从多个集合中取匹配的值
原始方法:
package com.github.springtools.test;
import com.google.common.collect.ImmutableList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TestFlatMap {
public static void main(String[] args) {
/*
* 匹配到姓马的并去重然后放入一个新的集合中
*/
List<String> nameListA = ImmutableList.of("素云云", "马云云", "腾花花", "阿娇娇", "马飞飞", "廖妹妹");
List<String> nameListB = ImmutableList.of("素云涛", "唐三三", "小五五", "马中山", "马僻静", "马肥羊");
List<String> nameListC = ImmutableList.of("张三", "李四", "王二", "麻子", "上官玩儿", "马可菠萝");
Set<String> nameSet = new HashSet<>();
nameListA.forEach(n -> {
if (n.startsWith("马")) {
nameSet.add(n);
}
});
nameListB.forEach(n -> {
if (n.startsWith("马")) {
nameSet.add(n);
}
});
nameListC.forEach(n -> {
if (n.startsWith("马")) {
nameSet.add(n);
}
});
System.out.println(nameSet.toString());
}
}
改造后的代码:
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class TestFlatMap2 {
public static void main(String[] args) {
/*
* 匹配到姓马的并去重然后放入一个新的集合中
*/
List<String> nameListA = ImmutableList.of("素云云", "马云云", "腾花花", "阿娇娇", "马飞飞", "廖妹妹");
List<String> nameListB = ImmutableList.of("素云涛", "唐三三", "小五五", "马中山", "马僻静", "马肥羊");
List<String> nameListC = ImmutableList.of("张三", "李四", "王二", "麻子", "上官玩儿", "马可菠萝");
Set<String> nameSet = Stream.of(nameListA, nameListB, nameListC)
.flatMap(list -> list.stream().filter(name -> name.startsWith("马")))
.collect(Collectors.toSet());
System.out.println(nameSet.toString());
}
}
总结
Java之道,写的代码第一点是要别人能看的明白,不然你离职了留下一堆像shi一样的代码,接盘的人一定会问候你的亲人,何必呢
二是要利用一切可以利用的工具类,不过用的时候看看别人的源码,写的时候考虑的周全与否,这样基本你的代码显性来看会少很多
总之,功能一点点实现,大道至简,用最简单的代码实现最强的逻辑~