用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
相关推荐
Q0032 Oracle的集合操作函数,如sum(),avg(),max(),min(),与select,where,grouby,having的先后顺序,使用方法 Oracle集合查询基本知识,只有进行分组的列,才可以取在集合查询SQL语句中取字段,先Group By,再Having...
表连接的几种方式,事务,存储过程,orderby,groupby - **表连接**:INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN。 - **事务**:一组操作作为一个整体,要么全部成功,要么全部失败。 - **存储过程**:预...
实例054 使用sort方法对数组进行排序 67 实例055 反转数组中元素的顺序 68 3.4 常用集合的使用 69 实例056 用动态数组保存学生姓名 69 实例057 用List集合传递学生信息 70 实例058 用TreeSet生成不重复自动排序 随机...
5. 分组(groupBy):按照某个属性将元素分组到不同的Map中。 6. 排序(sort):对流中的元素进行排序。 五、Stream API与传统for循环的区别 1. 代码简洁:Stream API使用链式调用,减少代码量,提高可读性。 2. 支持...
- **分组聚合**:使用 `groupBy` 后跟聚合函数(如 `count`, `sum`, `avg` 等)进行分组统计。 - **表连接查询**:通过 `join` 方法实现不同 DataFrame 的连接,包括内连接(默认)、左连接、右连接等。 - **查看列...
其中,SELECT用于指定要查询的列,FROM指定了数据来源,WHERE用于设置筛选条件,GROUP BY用于对结果进行分组,HAVING则是在分组后对组进行筛选,最后ORDER BY用来排序结果。 在实际编程中,我们可能需要根据用户...
接下来,使用`groupBy`方法按单词分组,并计算每个单词的出现次数。最后,按照出现次数排序并选取前10个单词打印出来。 #### 结论 Scala和Spark的结合为大数据处理提供了一种强大而灵活的方法。Scala的简洁语法和...
【大数据基本语法】和【java基础+大数据入门的笔记语法、示例】这两个主题涵盖了编程基础、Java语言特性以及大数据处理的相关知识点。以下是这些知识点的详细解释: 1. **集合操作**: - `list.get(index)`:返回...
10. **分组元素**:`groupBy()`方法根据元素的某个属性将集合元素分组。 11. **转换操作**:`toArray()`和`toJson()`等方法将集合转换为PHP数组或JSON格式。 12. **异常处理**:集合类可能还包括一些确保数据完整...
例如,`load`用于加载数据,`foreach`用于遍历数据,`filter`用于筛选数据,`group by`用于数据分组,`order by`用于排序,`join`用于数据关联,`generate`用于提取列,`union`和`intersect`用于集合运算,`dump`...
7. **グループ バイ(Group By)**:在SQL查询中,GROUP BY用于将数据按指定列进行分组。 8. **オーダ バイ(Order By)**:ORDER BY语句用于对查询结果进行排序。 9. **ソート(sort)**:排序是对数据进行排列的过程...
通过对"BDMS-main"这个压缩包文件的学习,学生能够深入理解哈希和分组在大数据分析中的应用,并掌握用Java编程语言实现这些概念的实际技巧。这个作业不仅锻炼了理论知识,还提升了实际编程能力,为后续的大数据分析...
`foreach`遍历集合,`distinct`去除重复元素,`map`和`flatMap`进行转换,`filter`筛选元素,`sorted`、`sortBy`和`sortWith`排序,`groupBy`按指定条件分组,`reduce`和`fold`进行聚合,`collect`根据模式匹配转换...
- **例题解析**:题目指出 HAVING 子句必须与 GROUP BY 子句一起使用,并且可以与 WHERE 子句一起使用。HAVING 子句的作用是限定分组的条件。 ### 7. 需求分析常用工具 - **知识点概述**:在软件开发过程中,需求...