Java数据处理(一)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章