java字符串排序,小白求助

SS帆 2017-09-03 06:35:59
import java.io.*;
import java.util.*;
import java.util.Comparator;

public class Main {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
ArrayList songList = new ArrayList(n);
String str = cin.nextLine();
while (str != null) {
str = cin.nextLine();

if (str.length() == 1 || str.length() == 0)
continue;
songInfo a = new songInfo(str);
songList.add(a);
}

cin.close();
Collections.sort(songList, new sort());
System.out.println(songList);
}

}

class songInfo {
public String title;
public String composer;
public int runningTime;

public songInfo(String str) {
String[] song = str.split("&");
this.title = song[0];
this.composer = song[1];
this.runningTime = Integer.parseInt(song[2], 10);
;
}

public String getTitle() {
return title;
}

public String getComposer() {
return composer;
}

public int getRunningTime() {
return runningTime;
}

public String toString() {
return this.title + this.composer + this.runningTime;
}
}

class sort implements Comparator {

@Override
public int compare(Object o1, Object o2) {
songInfo s1 = (songInfo) o1;
songInfo s2 = (songInfo) o2;
if (s1.getRunningTime() < s2.getRunningTime())
return 1;
return -1;

}

}

输入样本:
3
&
Pink Frost&Phillipps, Martin&234933
Se quel guerrier io fossi&Puccini, Giacomo&297539
Non piu andrai&Mozart&234933
M'appari tutt'amor&Flotow, F&252905

输出:
Se quel guerrier io fossi&Puccini, Giacomo&297539
M'appari tutt'amor&Flotow, F&252905
Non piu andrai&Mozart&234933

输入第一行为输出的数量,第二行为分隔符,第三行开始是字符串由&分隔为三部分。
根据数字部分排序,遇到相同的根据第一部分字母排序。

自学java三个星期,写了几个小时就写出来上面那一片,现在没有头绪了。
能不能请帮忙改改?
...全文
383 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dislido 2017-09-13
  • 打赏
  • 举报
回复
引用 3 楼 u013491662 的回复:
(o1,o2)->{...} 这是什么语法?
java 8 Lambda表达式,在这里会变成一个 Comparator
SS帆 2017-09-07
  • 打赏
  • 举报
回复
引用 1 楼 dislido 的回复:
import java.util.ArrayList;
import java.util.Scanner;
public class JTest {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        String sp = scanner.next();
        scanner.nextLine();
        while(scanner.hasNext()){
            list.add(scanner.nextLine());
        }
        scanner.close();
        
        list.sort((o1,o2)->{
            String []o1s = o1.split(sp);
            String []o2s = o2.split(sp);
            int o1i = Integer.valueOf(o1s[2]);
            int o2i = Integer.valueOf(o2s[2]);
            if(o1i == o2i)return o1s[0].compareTo(o2s[0]);
            return o2i-o1i;
        });
        
        for(int i = 0; i < num; i++){
            System.out.println(list.get(i));
        }
    }
}
原来可以这么精简
ImAmelie 2017-09-06
  • 打赏
  • 举报
回复
(o1,o2)->{...} 这是什么语法?
引用 1 楼 dislido 的回复:
import java.util.ArrayList;
import java.util.Scanner;
public class JTest {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        String sp = scanner.next();
        scanner.nextLine();
        while(scanner.hasNext()){
            list.add(scanner.nextLine());
        }
        scanner.close();
        
        list.sort((o1,o2)->{
            String []o1s = o1.split(sp);
            String []o2s = o2.split(sp);
            int o1i = Integer.valueOf(o1s[2]);
            int o2i = Integer.valueOf(o2s[2]);
            if(o1i == o2i)return o1s[0].compareTo(o2s[0]);
            return o2i-o1i;
        });
        
        for(int i = 0; i < num; i++){
            System.out.println(list.get(i));
        }
    }
}
galiniur0u 2017-09-06
  • 打赏
  • 举报
回复
java8都可以这么写代码了,6666
dislido 2017-09-03
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.Scanner;
public class JTest {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        String sp = scanner.next();
        scanner.nextLine();
        while(scanner.hasNext()){
            list.add(scanner.nextLine());
        }
        scanner.close();
        
        list.sort((o1,o2)->{
            String []o1s = o1.split(sp);
            String []o2s = o2.split(sp);
            int o1i = Integer.valueOf(o1s[2]);
            int o2i = Integer.valueOf(o2s[2]);
            if(o1i == o2i)return o1s[0].compareTo(o2s[0]);
            return o2i-o1i;
        });
        
        for(int i = 0; i < num; i++){
            System.out.println(list.get(i));
        }
    }
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧