Java 编码小技巧
1、锁与事务
获取锁与释放锁不能放在事务里面。
先释放锁再提交事务会导致脏数据。
2、Consumer 和 Supplier
- Consumer表示一个操作,其接收一个参数且没有返回值
@Test
public void consumerTest() {
List<String> fruits = Arrays.asList("apple", "banana", "orange");
print(fruits, o -> System.out.println(o));
print(fruits, System.out::println);
}
public void print(List<String> fruits, Consumer<String> consumer) {
for (String fruit: fruits) {
consumer.accept(fruit);
}
}
- Supplier表示结果的提供者,其返回一个对象且不接收任何参数
@Test
public void supplier() {
Supplier<String> now = () -> {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return dtf.format(LocalDateTime.now());
};
System.out.println(now.get());
}
3、BigDecimal
- 为避免精度无法表示问题
使用new BigDecimal("0.1")接收字符类型,使用BigDecimal.valueOf(0.1)接收数字类型 - 转换成字符串
toPlainString() - BigDecimal在列表中的累加
@Test
public void decimalTest () {
List<BigDecimal> cardValid = new LinkedList<>();
cardValid.add(new BigDecimal("0.1"));
cardValid.add(BigDecimal.valueOf(0.1));
BigDecimal totalPrice = cardValid.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(totalPrice.toPlainString());
}
4、拼接字符
- 使用StringJoiner进行拼接,创建时需指定拼接的符号
StringJoiner sj = new StringJoiner(",");
sj.add("a");
sj.add("b");
// 出来的结果是 a,b
String result = sj.toString();
- 使用占位符格式化字符串
String name = "椰羊";
Integer age = 3500;
// %s 代表占位符,按参数顺序进行填充
String result = String.format("姓名:%s,年龄:%s", name, age);

浙公网安备 33010602011771号