用java語言用sort方法實現groupby分組
用java語言用sort方法實現groupby分組
用排序的方法實現groupby分組,給定資料如下所示。
老王|A|90
李四|B|87
張三|C|70
老王|A|67
張三|A|98
李四|B|76
張三|C|67
張三|C|78
李四|A|89
源程式
import java.io.*;
import java.util.*;
public class DataProcess {
public static void main(String[] args) throws Exception {
String[][] arr = getFile("C:\\Users\\fj-ding\\Desktop\\hw1\\test.txt");
Sortchart sc = new Sortchart();
// 第1列,表示要選擇groupby的類別,第2列表示參見計算的資料列,從第0列開始算
int groubyKey = 0;
int dataLine = 2;
sc.process(arr, groubyKey, dataLine);
sc.outputFunction();
System.out.println("我是原矩陣****************************************");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
private static String[][] getFile(String pathName) throws Exception {
File file = new File(pathName);
if (!file.exists())
throw new RuntimeException("Sorry,Not File!");
BufferedReader br = new BufferedReader(new FileReader(file));
String str;
List<String[]> list = new ArrayList<String[]>();
while ((str = br.readLine()) != null) {
int j = 0;
// 正規表示式。
String arr[] = str.split("\|");
String[] dArr = new String[arr.length];
for (String ss : arr) {
dArr[j++] = ss;
}
list.add(dArr);
}
int max = 0;
for (int i = 0; i < list.size(); i++) {
if (max < list.get(i).length)
max = list.get(i).length;
}
// 這個是動態的了,陣列長度。size:泛型的個數。
String[][] sanjiaoxing = new String[list.size()][max];
for (int i = 0; i < sanjiaoxing.length; i++) {
for (int j = 0; j < list.get(i).length; j++) {
// 這是一種寫法,有點複雜。
sanjiaoxing[i][j] = list.get(i)[j];
}
}
return sanjiaoxing;
}
}
class Sortchart {
String[][] matrixTable;
int column;
String[][] okMatrix;
int dataColumn;
public void process(String[][] matrixTable, int column, int dataColumn) {
int a = 0;
List list0 = new ArrayList();
this.matrixTable = matrixTable;
this.column = column;
this.dataColumn = dataColumn;
for (int i = 0; i < matrixTable.length; i++) {
list0.add(matrixTable[i][column]);
}
Collections.sort(list0);
// 將行向量多加一行,以查詢時防止越界。
okMatrix = new String[matrixTable.length + 1][matrixTable[0].length];
for (int j = 0; j < matrixTable.length; j++) {
a = 1;
for (int i = 0; i < matrixTable.length; i++) {
if (matrixTable[i][column] == list0.get(j) && a == 1) {
for (int k = 0; k < matrixTable[0].length; k++) {
okMatrix[j][k] = matrixTable[i][k];
a = 0;
}
}
}
}
// 排列以後的矩陣
System.out.println("我是新矩陣**************************************");
for (int i = 0; i < matrixTable.length; i++) {
for (int j = 0; j < matrixTable[0].length; j++) {
System.out.print(okMatrix[i][j] + " ");
}
System.out.println();
}
}
public void outputFunction() {
// ArrayList list1=new ArrayList();
double[] darr = new double[matrixTable.length];
int count = 0;
double sum = 0;
double avg = 0;
for (int i = 0; i < matrixTable.length; i++) {
for (int j = 0; j < matrixTable[0].length; j++) {
if (okMatrix[i][j].equals(okMatrix[i][column])) {
darr[i] = Double.parseDouble(okMatrix[i][dataColumn]);
// darr[i+1]=Double.parseDouble(okMatrix[i+1][column+1]);
// 小心越界問題
if (okMatrix[i][j].equals(okMatrix[i + 1][j])) {
// sum=darr[i];
sum = sum + darr[i];
count++;
} else {
sum = sum + darr[i];
avg = sum / (count + 1);
// list1.add(sum);
System.out.println("key:" + okMatrix[i][j] + " 求和:"
+ sum + " 次數:" + (count+1) + " 均值:" + avg);
sum = 0;
count = 0;
}
}
}
}
}
}
輸出結果
我是新矩陣****************************
張三 C 70
張三 A 98
張三 C 67
張三 C 78
李四 B 87
李四 B 76
李四 A 89
老王 A 90
老王 A 67
key:張三 求和:313.0 次數:4 均值:78.25
key:李四 求和:252.0 次數:3 均值:84.0
key:老王 求和:157.0 次數:2 均值:78.5
我是原矩陣*****************************************
老王 A 90
李四 B 87
張三 C 70
老王 A 67
張三 A 98
李四 B 76
張三 C 67
張三 C 78
李四 A 89
相關文章
- sql 語言 groupBy 分組統計時間段解決方案SQL
- Python實用技法第14篇:根據欄位將記錄分組:itertools.groupby()Python
- 用 Go 語言實戰 Limit Concurrency 方法GoMIT
- [譯]用javascript實現一門程式語言-語言構想JavaScript
- 用JavaScript實現一門程式語言 2 (λanguage語言簡介)JavaScript
- 三種語言實現差分(C++/Python/Java)C++PythonJava
- Java 8用函數語言程式設計實現集合操作案例Java函數程式設計
- 【原創】用Java實現按位元組長度擷取字串的方法Java字串
- [譯] 用javascript實現一門程式語言-前言JavaScript
- 用C語言實現八數碼問題C語言
- 關於 groupBy 分組查詢的分頁處理
- 用Java語言寫氣泡排序Java排序
- 現代程式語言用什麼語言寫成?
- JavaScript 中的陣列分組:array.groupBy()JavaScript陣列
- c語言實用小程式C語言
- Go語言實現位元組記錄鎖Go
- 用listagg函式分組實現列轉行函式
- 用javascript實現一門程式語言-字元輸入流JavaScript字元
- 用XML實現程式語言間的互譯 (轉)XML
- Java利用Comparator實現分組排序Java排序
- 用於將位元組進行base64編碼或解碼(C語言實現)C語言
- 用java語言,模擬實現作業系統的銀行家演算法。Java作業系統演算法
- lodash.groupBy 處理陣列物件按需分組陣列物件
- [譯]用javascript實現一門程式語言-詞法分析JavaScript詞法分析
- 用C語言實現有限狀態自動機FSMC語言
- Go語言實現的Java Stream APIGoJavaAPI
- java語言實現二叉樹Java二叉樹
- 【轉】堆排序Heap Sort——Java實現排序Java
- 用原生Js利用sort方法 實現圖片的正 倒排序和隨機排序JS排序隨機
- C語言用遞迴方法求解階乘C語言遞迴
- 用還原論方法研究大語言模型?模型
- Go 語言的 10 個實用技巧Go
- [譯]用javascript實現一門程式語言-AST的介紹JavaScriptAST
- 用c語言實現資料結構——單連結串列C語言資料結構
- C語言用三目運算實現判斷大寫C語言
- 用無上下文的Go語言實現HTTP服務GoHTTP
- 使用sort方法實現陣列升序降序陣列
- 使用 Rust 語言編寫 Java JNI 實現RustJava