代码优化方式有很多,本文记录几个优化小技巧,会持续更新,欢迎关注~
public static void main(String[] args) {
User user1 = new User(1, "张三", 20);
User user2 = new User(2, "李四", 21);
User user3 = new User(3, "王武", 22);
User user4 = new User(4, "老六", 23);
User user5 = new User(5, "小七", 24);
User user6 = new User(6, "大八", 25);
List<User> userList = new ArrayList<>(7);
userList.add(user1);
userList.add(user2);
userList.add(user5);
userList.add(user6);
userList.add(user6);
userList.add(user3);
userList.add(user4);
//转换Map结构
Map<Integer, String> roleMap = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
//转换Map<id,entity>结构
Map<Integer, User> collect = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
//获取list的id集合,未去重的
List<Integer> idList = userList.stream().map(User::getId).collect(Collectors.toList());
//获取list的id集合,去重的
List<Integer> idList = userList.stream().map(User::getId).distinct().collect(Collectors.toList());
//list转成map,注意key重复情况下只会有一个值。可以在多层循环中使用
Map<Integer, List<User>> collect = userList.stream().collect(Collectors.groupingBy(User::getId));
//filter:根据条件过滤流中的某些元素
List<User> userFilter = userList.stream().filter(user -> user.getName().equals("老六")).collect(Collectors.toList());
//limit(n):获取n个元素
List<User> userLimit = userList.stream().filter(user -> user.getName().equals("大八")).limit(1).collect(Collectors.toList());
//skip(n):跳过n元素,配合limit(n)可实现分页
List<User> userSkip = userList.stream().skip(2).limit(3).collect(Collectors.toList());
//distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素
List<User> userDistinct = userList.stream().distinct().collect(Collectors.toList());
//流操作排序:按照id正序,由小到大
List<User> userSort_1 = userList.stream().sorted((o1, o2) -> o1.getId().compareTo(o2.getId())).collect(Collectors.toList());
List<User> userSort_2 = userList.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
//流操作排序:按照id倒序,由大到小
List<User> userSort_3 = userList.stream().sorted((o1, o2) -> o2.getId().compareTo(o1.getId())).collect(Collectors.toList());
List<User> userSort_4 = userList.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
//流操作:按照id排序,如果id相同按照名称排序
List<User> userSort2 = userList.stream().sorted((o1, o2) -> {
if (0 != o1.getId().compareTo(o2.getId())) {
return o1.getId().compareTo(o2.getId());
} else {
return o1.getName().compareTo(o2.getName());
}
}).collect(Collectors.toList());
//List接口排序:按照id正序,改变原list顺序,不生成新的对象List
userList.sort(Comparator.comparing(User -> User.getId()));
//获取id中最大,最小,总数
LongSummaryStatistics intSummaryStatistics = userList.stream().mapToLong(User::getId).summaryStatistics();
System.out.println(intSummaryStatistics.getMin());
System.out.println(intSummaryStatistics.getMax());
System.out.println(intSummaryStatistics.getCount());
}
以前常用方式:
String url = "https://www.baidu.com/s?ie=" + ieVal + "&f=" + fVal;
后来使用StringBuffer方式:
StringBuffer stringBufferURL = new StringBuffer("https://www.baidu.com/s?");
stringBufferURL.append("ie=")
.append(ieVal)
.append("&f=")
.append(fVal);
优化后使用String.format(不建议在循环体中使用):
String url = "https://www.baidu.com/s?ie=%s&f=%s";
String.format(url, ieVal, fVal);
优化前:
for (int i = 1; i <= count; i++){
Object obj = new Object();
}
优化后:
Object obj = null;
for (int i = 0; i <= count; i++){
obj = new Object();
}
建议if else判断不超过三层
1、使用枚举类
public enum EnterpriseTypeEnum {
Industry(0,0,"工业"),
Business(1,1,"商业"),
Hospital(2,2,"医院");
private Integer mainType;
private Integer subType;
private String typeName;
}
2、使用switch
jdk1.7以后switch支持String类型
String a="你好";
switch (a){
case "你好":
System.out.println("你好");
break;
case "不好":
System.out.println("不好");
break;
}
3、判空时,可使用三目运算符或Optional函数
//三目运算
String val = "demo";
System.out.println(null == val ? "" : val)
//Optional函数
Optional<String> strOptional = Optional.of(val);
strOptional.ifPresentOrElse(System.out::println, () -> System.out.println("Null"));
优化前:
SQL写法:
SELECT count(*) FROM table WHERE id = 1 AND status = 0;
Java写法:
int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
//当存在时,执行这里的代码
} else {
//当不存在时,执行这里的代码
}
优化思路:SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了,业务代码中直接判断是否非空即可
优化后:
SQL写法:
SELECT 1 FROM table WHERE id = 1 AND status = 0 LIMIT 1;
Java写法:
Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
//当存在时,执行这里的代码
} else {
//当不存在时,执行这里的代码
}