使用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一样的代码,接盘的人一定会问候你的亲人,何必呢
二是要利用一切可以利用的工具类,不过用的时候看看别人的源码,写的时候考虑的周全与否,这样基本你的代码显性来看会少很多
总之,功能一点点实现,大道至简,用最简单的代码实现最强的逻辑~