Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据少量参数对类内容进行排序

根据少量参数对类内容进行排序
EN

Stack Overflow用户
提问于 2013-08-06 09:44:44
回答 2查看 105关注 0票数 1

我需要实现对文件内容的排序。

每一行文件都包含下一个数据:Instructor, Course, Group, Student, Result,并且可以包含同一学生的很少结果。

例如,

代码语言:javascript
运行
AI代码解释
复制
Paul Schwartz,Introduction to Computer Architecture,I1,Ben Dunkin,88
Muhamed Olji,Object Oriented Programming,I4,Mike Brown,73
...
Paul Schwartz,Introduction to Computer Architecture,I1,Ben Dunkin,96

我需要为每一个教官实施

  • 由他领导的课程;
  • 所有听这门课的团体(升序);
  • 每组Student - Result (降序);
  • 本课程成绩较高的前5名Student

我从文件中读取并创建了类Item

代码语言:javascript
运行
AI代码解释
复制
class Item { 
    private String instructor;
    private String course;
    private String group;
    private String student;
    private int result;
    // and add appropriate public getters/setters
}

在java中,我们可以使用两个选项之一对该类的所有元素进行排序:实现Comparable接口的类和覆盖compareTo() method的类,或者使用compare() method的外部Comparator接口。但是,我们如何使用这些选项对不同的排序查询进行排序。

  • 如何使用compareTo()来满足这一需求(或更好的compare())?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-06 09:59:40

Item的比较器将使用以下比较:

代码语言:javascript
运行
AI代码解释
复制
public class CustomComparator implements Comparator {
  public int compare(Object aObjectOne, Object aObjectTwo) {
    Item objectOne = (Item) aObjectOne;
    Item objectTwo = (Item) aObjectTwo;

    int cmpinstr = objectOne.getInstructor().compareTo(objectTwo.getInstructor());
    if (cmpinstr != 0) // different instructor
        return cmpinstr;

    int cmpcourse = objectOne.getCourse().compareTo(objectTwo.getCourse());
    if (cmpcourse != 0) // different course
        return cmpcourse;

    int cmpgroup = objectOne.getGroup().compareTo(objectTwo.getGroup());
    if (cmpgroup != 0) // different group
        return cmpgroup;

    // sorting by result.
    if (objectOne.getResult() < objectTwo.getResult())
        return -1; // i1 has lower result than i2
    else if (objectOne.getResult() > objectTwo.getResult())
        return 1; // i1 has higher result than i2

    return 0; // i1 and i2 have the same result
  }
}

要获得前五名,只需对你收藏的最后五名学生进行排序和选择。

如果要根据组、讲师、课程或结果筛选数据,可以使用自定义筛选器循环遍历集合。

票数 2
EN

Stack Overflow用户

发布于 2013-08-06 09:58:32

您应该让类实现可比的,它有一个与String一样的compareTo方法。

因此,您的自定义比较器可能如下所示:

代码语言:javascript
运行
AI代码解释
复制
public class CustomComparator implements Comparator<Item> {
    @Override
    public int compare(Item i1, Item i2) {
        return i1.compareTo(i2);
    }
}

( compare()方法必须返回int,因此不能直接返回boolean。)

而不是需要在您的overwrite类中使用CompareTo方法,在该类中定义应该比较哪些属性。

因为您想对不同的选项进行排序,所以需要多个比较方法和多个比较器。你只需要给他们打电话就行了。

您的排序代码应该是这样的:

代码语言:javascript
运行
AI代码解释
复制
Collections.sort(YourObejctList, new CustomComparator());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18086964

复制
相关文章
什么是泛型以及在集合中泛型的使用[通俗易懂]
泛型最常与集合使用,因为泛型最开始开始被加入Java就是为了解决集合向下转型一类问题的。如果我们有这样一个需求:定义一个描述类圆,要求圆中的数据类型是不确定的,也就是声名属性的时候,属性类型是不确定的。比如描述类圆中有半径,要求半径可以用int,也可以用double。那么此时数据类型不确定,就使用泛型,把数据类型参数化。
全栈程序员站长
2022/06/25
2.6K0
加法变乘法
本文最后更新于 1163 天前,其中的信息可能已经有所发展或是发生改变。 #include<iostream> #include<cstring> using namespace std; int main(){ int arr[49]; for(int i=0;i<49;i++){ arr[i]=i+1; } int arr1[48]; memset(arr1,0,sizeof(arr1)); for(int i=0;i<46;i++){ arr1[i]=1; for(int j=
Yuyy
2022/06/28
9270
泛型在Java中的应用
在对该类进行实例化时,需要将泛型指定为具体的包装类,此时,在实例化泛型类时,就可以起到编译时检查的作用。
头发还在
2023/10/16
4020
Dart中的泛型方法、泛型类、泛型接口
为了能在一个方法里实现传入什么数据类型就返回什么数据类型,可以利用泛型将方法写成下面这样:
越陌度阡
2020/12/10
4.7K0
Dart中的泛型方法、泛型类、泛型接口
XYG3型泛函在ORCA中的使用
本篇文章中我们讨论XYG3型泛函在ORCA中的使用方法。关于XYG3型泛函的介绍可见上期链接。
用户7592569
2022/03/31
1.7K0
List集合中泛型使用细节
我们可以看到 需要的是Object 传的是一个String 这种情况我们使用时候是需要注意的 但是有一种情况是可以的
暴躁的程序猿
2022/03/23
1.1K0
List集合中泛型使用细节
矩阵乘法
#include <stdio.h> #include <stdlib.h> #include <math.h> #define LEN 3
WindCoder
2018/09/20
9630
[每日一题]矩阵乘法
本次的题目来源于C语言网比赛栏目八月月赛第一题,记得去试试看看自己能不能AC哦!!! 题目描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入 第一行是一个正整数N、M(1< =N< =30, 0< =M< =5),表示矩阵A的阶数和要求的幂数 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出 输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
编程范 源代码公司
2018/04/18
1.4K0
TypeScript中泛型及泛型函数、泛型类、泛型接口,泛型约束,一文读懂
 最近在学TypeScript,然后整理了一下关于TypeScript中泛型的一些笔记。
痴心阿文
2022/11/21
3.6K0
详解Python中的算术乘法、数组乘法与矩阵乘法
(2)列表、元组、字符串这几种类型的对象与整数之间的乘法,表示对列表、元组或字符串进行重复,返回新列表、元组、字符串。
Python小屋屋主
2021/05/11
10K0
详解Python中的算术乘法、数组乘法与矩阵乘法
什么是泛型,怎么使用泛型分析
泛型就是广泛的类型,也是一种数据类型,而这种数据类型可以是任意类型,编写过程中当中不能确定类型,创建对象时必须指定具体类型,不指定也可以,但是会出现一些错误。
全栈程序员站长
2022/06/28
1.7K0
什么是泛型,怎么使用泛型分析
Java 泛型使用
泛型是Java中一项十分重要的特性,在Java 5版本被引入,在日常的编程过程中,有很多依赖泛型的场景,尤其是在集合容器类的使用过程中,更是离不开泛型的影子。
zhipingChen
2018/12/24
8950
08:矩阵加法
08:矩阵加法 总时间限制: 1000ms 内存限制: 65536kB描述 输入两个n行m列的矩阵A和B,输出它们的和A+B。 输入第一行包含两个整数n和m,表示矩阵的行数和列数。1 <= n <= 100,1 <= m <= 100。 接下来n行,每行m个整数,表示矩阵A的元素。 接下来n行,每行m个整数,表示矩阵B的元素。 相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间。输出n行,每行m个整数,表示矩阵加法的结果。相邻两个整数之间用单个空格隔开。样例输入 3 3 1 2 3 1 2
attack
2018/04/03
1.7K0
C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托
给.neter们整理了一份《.NET/C#面试手册》,目前大约4万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间。对于没有跳槽打算的也可以复习一下相关知识点,就当是查缺补漏!
全栈程序员站长
2022/09/14
3.1K0
C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托
Java中泛型的介绍和使用
我们都知道Java里的集合(list,map....)是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。看下面这段示例代码
框架师
2019/12/02
1K0
全面解读!Golang中泛型的使用
导语 | Golang在2022-03-15发布了V1.18正式版,里面包含了对泛型的支持,那么最新版本的泛型如何使用呢?有哪些坑呢?本文全面且详细的带你了解泛型在Golang中的使用。 一、什么是泛型 说起泛型这个词,可能有些人比较陌生,特别是PHP或者JavaScript这类弱语言的开发者,尤其陌生。因为在这些弱语言中,语法本身就是支持不同类型的变量调用的。可以说无形之中早已把泛型融入语言的DNA中了,以至于开发者习以为常了。 举个PHP中的泛型的例子: 我们定义了一个sum函数,参数是传入2个变量,返
腾讯云开发者
2022/06/24
8.8K2
全面解读!Golang中泛型的使用
Java中泛型的详细解析,深入分析泛型的使用方式
可以发现,在编译过后,程序会采取去泛型化措施.也就是说,Java中的泛型,只在编译阶段有效.在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换方法
攻城狮Chova
2022/01/22
1.3K0
【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )
泛型类用法 : 使用时先声明泛型 , 如果不声明泛型 , 则表示该类的泛型是 Object 类型 ;
韩曙亮
2023/03/29
10.8K0
【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )
【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ;
韩曙亮
2023/03/29
19.3K0
【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )
Java进阶:【泛型】认识泛型,泛型方法,泛型类,泛型接口和通配符
例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。
冷环渊
2021/11/29
4.1K0
Java进阶:【泛型】认识泛型,泛型方法,泛型类,泛型接口和通配符

相似问题

使用泛型进行矩阵乘法

10

numpy中的矩阵加法/乘法

10

在SYCL中实现矩阵加法和乘法

10

使用泛型乘法集合

12

如何在scala中使用泛型数字类型进行加法和乘法?

13
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档