1.数字格式化
public static void main(String[] args) {
/**
* #号的个数代表着数字的位数
*/
BigDecimal num = BigDecimal.valueOf(3.1415926);
//输出整数
DecimalFormat decimalFormat1 = new DecimalFormat("###");
//输出百分比
DecimalFormat decimalFormat2 = new DecimalFormat("###.##%");
//输出小数点后保留规定的位数
DecimalFormat decimalFormat3 = new DecimalFormat("###.###");
System.out.println(decimalFormat1.format(num));
System.out.println(decimalFormat2.format(num));
System.out.println(decimalFormat3.format(num));
BigDecimal num1 = BigDecimal.valueOf(31415926);
//金钱输出样式三个数字直接用逗号隔开,#号的位数如果和数字的成倍数则会按照#号的个数进行分割,否则开头的会出现位数不够可能形成31,415,926
DecimalFormat decimalFormat4 = new DecimalFormat(",###");
//嵌入模版输出
DecimalFormat decimalFormat5 = new DecimalFormat("你的余额,###$");
System.out.println(decimalFormat4.format(num1));
System.out.println(decimalFormat5.format(num1));
}
结果:
2.列表遍历删除使用
在实际的项目中可能会出现对一个list集合中的内容进行遍历删除,以下是几种遍历方法的优缺点。
2.1foreach遍历
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(i + ">index");
}
for (String id : list) {
if (id.contains("2")) {
list.remove(id);
}
}
}
上面这种写法导致的问题,因为上面代码跑完之后,堆栈就出来了
在foreach循环中不允许删除,新增
2.2 使用普通的for循环遍历
第一种:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(i + ">index");
}
for (int index = 0; index < list.size(); index++) {
if (index % 5 == 0) {
list.remove(index);
}
}
System.out.println(list);
}
第二种:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(i + ">index");
}
int size = list.size();
for (int index = 0; index < size; index++) {
if (index % 5 == 0) {
list.remove(index);
} else {
System.out.print(list.get(index));
}
}
}
第一种方法不符合我们的预期,第二种会导致下标越界问题,
2.3 使用Iterator
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(i + ">index");
}
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String tmp = iterator.next();
if (tmp.contains("2")) {
iterator.remove();
}
}
}
2.4使用jdk8后的流方式进行
list.removeIf(s -> s.contains("3"));
综上所述:注意不要在for/foreach遍历过程中删除元素,如果有移除元素的需求,使用迭代器或者使用jdk8的流式写法.
3.HashMap遍历删除使用
3.1 传统方式:
使用entrySet进行遍历删除
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
Map.Entry<String, Integer> entry;
while (iterator.hasNext()) {
entry = iterator.next();
if (entry.getValue() % 2 == 0) {
iterator.remove();
}
}
System.out.println(map);
}
3.2 使用jdk8+的简洁版
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
map.entrySet().removeIf(entry -> entry.getValue() % 2 == 0);
System.out.println(map);
}