1 简介
主讲Java数据计算。
使用的包。
import java.text.DecimalFormat;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
2 保留有效数字
/**
* 商计算,保留有效数字
*
* @param a 被除数
* @param b 除数
* @return 商
*/
public String significantDigits(int a, int b) {
float c = 0.0f;
String cStr = null;
c = (float) a / b;
System.out.println("division result:" + c);
// 保留两位有效数字
DecimalFormat df = new DecimalFormat("0.00");
cStr = df.format(c);
return cStr;
}
3 List数据
3.1 排序
- 函数
/**
* 列表中指定字段排序
*
* @param dataLis 包含map的列表
* @return 排序后的列表
*/
public List listSort(List dataLis) {
Collections.sort(dataLis, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> m1, Map<String, Object> m2) {
String score1 = (String) m1.get("score");
String score2 = (String) m2.get("score");
return score1.compareTo(score2);
}
});
return dataLis;
}
- 主程序
public static void main(String[] args) {
App app = new App();
List personInfosLi = new ArrayList();
Map personInfosMap1 = new HashMap() {
{
put("name", "xiaohei");
put("score", "100");
}
};
Map personInfosMap2 = new HashMap() {
{
put("name", "xiaohua");
put("score", "190");
}
};
Map personInfosMap3 = new HashMap() {
{
put("name", "xiaolan");
put("score", "099");
}
};
personInfosLi.add(personInfosMap1);
personInfosLi.add(personInfosMap2);
personInfosLi.add(personInfosMap3);
List liSortRes = app.listSort(personInfosLi);
System.out.println("list sort result:" + liSortRes);
}
- 结果
list sort result:[{score=099, name=xiaolan}, {score=100, name=xiaohei}, {score=190, name=xiaohua}]
- 注意
map中用于比较的键值为字符串,且字符串长度一致,否则无法得到正确的结果,如使用分数,若两位数和三位数分数比较,两位数的分数前添加0,如099,110,130。
3.2 拼接
将List拼接为包含指定字符的字符串。
package basic.datatype.dataformat;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.Arrays;
public class DataFormatTest{
private static void arrayToStr(){
String[] dataStrArr = {"xiao", "da", "diandian"};
List dataLi = Arrays.asList("xiao", "hei");
String dataStr = String.join(",", dataLi);
// String dataStr = Arrays.toString(dataStrArr);
// String dataStr = String.valueOf(dataStrArr);
System.out.println("data string:"+dataStr);
}
public static void main(String[] args){
arrayToStr();
}
}
3.3 提取
- 代码段
List<String> listExtract = Arrays.asList("name", "address", "sex", "position", "salary", "height", "age")
System.out.println("Extract datas:"+listExtract.subList(2,4));
- 结果
Extract datas:[sex, position]
- 解析
subList用于提取List指定位置的和长度的数据,原型:
subList(index, offset)
其中,index为索引(从0计数),offset为位置(从1计数),如subList(2,4),索引为2,位置为4,索引从0开始计数,位置从1开始计数。
4 字符串数组切割
Java中使用split方法对包含特定字符的字符串进行切割,返回字符串数组。
分割使用双反斜线加上待切割的字符完成切割。
package basic.datatype.dataprocess;
public class DataProcessUtil {
public static String[] splitString(String symbol, String datas){
String[] splitStr = null;
if(symbol.equals("")){
splitStr = datas.split("\\");
return splitStr;
}else{
splitStr = datas.split("\\"+symbol);
return splitStr;
}
}
public static void splitStringIterator(String[] datas){
for(int i=0;i<datas.length;i++){
System.out.println("data:"+datas[i]);
}
}
public static void main(String[] args){
String dataStr1 = "Hello|world";
String dataStr2 = "Hello,world";
String[] resStr1 = splitString("|", dataStr1);
String[] resStr2 = splitString(",", dataStr2);
splitStringIterator(resStr1);
splitStringIterator(resStr2);
}
}
5 输入数据
- 代码段
Scanner inputData = new Scanner(System.in);
System.out.println("Please input your name:");
// String format
String name = inputData.nextLine();
System.out.println("Name:"+name);
// Integer format
System.out.println("Please input your age:");
Integer age = inputData.nextInt();
System.out.println("Age:"+age);
// Double format
System.out.println("Please input your salary:");
Double salary = inputData.nextDouble();
System.out.println("Salary:"+salary);
- 结果
Please input your name:
xiaoxiao
Name:xiaoxiao
Please input your age:
20
Age:20
Please input your salary:
15000.99
Salary:15000.99
- 解析
Scanner为输入对象,用于存储输入数据,通过不同方法存储对应类型的数据
序号 | 类型 | 方法 |
---|---|---|
1 | 字符串 | nextLine() |
2 | 整型 | nextInt() |
3 | 单精度浮点型 | nextFloat() |
4 | 双精度浮点型 | nextDouble() |
6 &与&&
- &
完全执行所有语句,进行最终判断。
Map<String, String> a = new HashMap();
if(a.get(“name”)!=null&a.get(“name”)!="") - &&
部分执行,当出现为false时,直接判断,停止执行后面的判断语句。
if(a.get(“name”)!=null&&a.get(“name”)!="")
当a.get(“name”)==null时,若使用&,会继续执行后面的语句,此时会空指针异常,若使用&&,则会直接跳出,不执行后面的语句。
【参考文献】
[1]https://blog.csdn.net/qmdweb/article/details/86524223
[2]https://blog.csdn.net/CHITTY1993/article/details/51732501
[3]https://www.cnblogs.com/xiaoxiaohui2015/p/5838674.html
[4]https://blog.csdn.net/qq_41181772/article/details/83653875