Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排序数组列表<;对象[]>;按列_Java_Arrays_Sorting_Arraylist_Multidimensional Array - Fatal编程技术网

Java 排序数组列表<;对象[]>;按列

Java 排序数组列表<;对象[]>;按列,java,arrays,sorting,arraylist,multidimensional-array,Java,Arrays,Sorting,Arraylist,Multidimensional Array,我对Java和面向对象编程非常陌生。我正在尝试对对象的二维排列进行排序。目前,我的代码读取一个CSV文件,并将每一行放入一个新对象中,每个对象都有6个与该文件相关的值 这是我的密码: publicstaticvoidreadfile(){ 字符串行=”; 试一试{ BufferedReader br=新的BufferedReader(新文件读取器(Main.filepath)); 而((line=br.readLine())!=null){ 字符串值[]=line.split(“,(?=([^\

我对Java和面向对象编程非常陌生。我正在尝试对对象的二维排列进行排序。目前,我的代码读取一个CSV文件,并将每一行放入一个新对象中,每个对象都有6个与该文件相关的值

这是我的密码:

publicstaticvoidreadfile(){
字符串行=”;
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(Main.filepath));
而((line=br.readLine())!=null){
字符串值[]=line.split(“,(?=([^\“]*\”[^\“]*\”*[^\“]*$”)”);
字符串filmName=值[0];
int filmYear=Integer.parseInt(值[1]);
字符串filmRating=值[2];
字符串filmGenre=值[3];
int filmLength=Integer.parseInt(值[4]);
double filmScore=double.parseDouble(值[5]);
对象[]电影={filmName,filmYear,filmRating,film流派,filmLength,filmScore};
添加(胶片);
}
}捕获(例外情况除外){
System.out.println(“未找到文件”);
}
}
我知道声明每个变量最终都是不必要的,但是这让我更容易理解


我想使用
.sort()
filmLength
变量对数组进行排序,但我不确定如何排序。

根据面向对象编程的原则,您应该创建一个
Film
类,该类可以存储所有六个属性。您可以实现
compariable
来定义排序顺序

public class Film implements Comparable<Film>{
    private final String filmName, filmRating, filmGenre;
    private final int filmYear, filmLength;
    private final double filmScore;
    public Film(final String filmName, final int filmYear, final String filmRating, final String filmGenre, final int filmLength, final double filmScore){
       this.filmName = filmName;
       this.filmYear = filmYear;
       this.filmRating = filmRating;
       this.filmGenre = filmGenre;
       this.filmLength = filmLength;
       this.filmScore = filmScore;
    }

   @Override
   public int compareTo(final Film o){
      return Integer.compare(this.filmLength, o.filmLength);
   }
}
您可以使用该方法,并将一系列比较器传递给它,这些比较器按照特定的顺序和方向按特定的字段对列表进行排序

//准备数组列表
对象[]film1={“filmName2”,1981年,“filmRating1”,“filmGenre3”,165,5.4D};
对象[]film2={“filmName5”,1982,“filmRating2”,“filmGenre5”,163,5.5D};
对象[]film3={“filmName1”,1983年,“filmRating3”,“filmGenre4”,163,5.1D};
对象[]film4={“filmName4”,1984年,“filmRating4”,“filmGenre2”,161,5.2D};
对象[]film5={“filmName3”,1985,“filmRating5”,“filmGenre1”,162,5.3D};
对象[]film6={“filmName3”,1980年,“filmRating5”,“filmGenre1”,162,5.3D};
对象[]film7={“filmName3”,1980年,“filmRating5”,“filmGenre1”,162,5.0D};
对象[]film8={“filmName2”,1979年,“filmRating1”,“filmGenre3”,165,5.4D};
列出文件数据=
阵列。asList(电影7、电影1、电影3、电影2、电影8、电影5、电影4、电影6);
//使用比较器链对列表进行排序。
//在这种情况下,您应该将字段强制转换为其实际类型。
排序(比较器)
.comparing(e->(String)((Object[])e)[0],Comparator.reverseOrder()
.然后比较(e->(double)((Object[])e)[5])
.然后比较(e->(int)((Object[])e[1]);
//逐行打印列表
fileData.stream().map(Arrays::toString).forEach(System.out::println);
//[FilmName51982,filmRating2,FilmGenre51635.5]
//[FilmName41984,filmRating4,FilmGenre2161,5.2]
//[filmName3,1980,filmRating5,FilmGenre11262,5.0]
//[filmName3,1980,filmRating5,filmGenre1,162,5.3]
//[filmName3,1985,filmRating5,filmGenre1,162,5.3]
//[FilmName219979,filmRating1,FilmGenre31655.4]
//[FilmName21981,filmRating1,FilmGenre31655.4]
//[FilmName11983,filmRating3,FilmGenre41635.1]

这是否回答了您的问题?请注意。虽然您当前的数据结构并没有使此任务无法完成,但如果您创建了一个自定义类
Film
,其中每个对象都保存了一部电影的数据(名称、年份等),这将变得更加容易。使用对象数组结构,您将失去java等语言提供的许多类型安全性。我将如何创建该Film类?我不知道如何使用面向对象,您能否重新找到任何可能有用的资源?
BufferedReader br = new BufferedReader(new FileReader(Main.filepath));
final List<Film> films = new ArrayList<>();
while ((line = br.readLine()) != null) {
    String values[] = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

    String filmName = values[0];
    int filmYear = Integer.parseInt(values[1]);
    String filmRating = values[2];
    String filmGenre = values[3];
    int filmLength = Integer.parseInt(values[4]);
    double filmScore = Double.parseDouble(values[5]);
    films.add(new Film(filmName, filmYear, filmRating, filmGenre, filmLength, filmScore));
}
Collections.sort(films);//sort