按字符串中的第二个单词对ArrayList进行排序

时间:2017-11-15 23:02:13

标签: java arrays arraylist

我目前有一个.txt文件,我需要根据里面的内容读取和输出数据。我目前打开文件并将文件中的每一行保存到ArrayList中。

.txt文件设置如下;

  • 2380213012999 1508434343432 david dead
  • 4327482397488 7439857934858 john alive
  • 3857948998099 2222783749887马丁杀了凯莉
  • 3857948998099 2222783749887 john killed david

当前代码;

bits 32
global start
extern exit,printf
import exit msvcrt.dll 
import printf msvcrt.dll
segment data use32 class=data
    format db "%s",0
    s1 db "1","3","6","2","3","10"
    l equ $-s1
    s2 db "6","3" ,"11","1","2", "5"
    d times l db 0

segment code use32 class=code
start:
    mov esi,0
    mov edi,0
    cld
    Repeta:
        mov al,[s1+esi]
        mov bl,[s2+esi]
        cmp al,bl
        jg et1
        mov[d+edi],bl
        inc edi
        inc esi
        jmp et2
        et1:
            mov[d+edi],al
            inc edi
            inc esi
        et2:    
    cmp esi,l
    jne Repeta
    push d
    push format
    call[printf]
    add esp,4*2

push dword 0 
call [exit]

我只是想知道是否有办法按第二个大号对每行文字进行排序,我看了,我似乎无法找到任何东西。正确的方向上的一点或一些指导将是惊人的,因为我目前难以理解,因为我需要这样做才能进一步发展。

2 个答案:

答案 0 :(得分:1)

把它放在你的while循环之后

java.util.Collections.sort(txtLine, new Comparator<String>() {
    public void compare(String lineA, String lineB) {
        String wordA2 = lineA.split(" ")[1];
        String wordB2 = lineB.split(" ")[1];
        return wordA2.compareTo(wordB2);
    }
});

可以更高效地完成,但代码不会比这短得多(除非你使用lambdas)。

java.util.Collections.sort(txtLine, (String lineA, String lineB) -> {
        String wordA2 = lineA.split(" ")[1];
        String wordB2 = lineB.split(" ")[1];
        return wordA2.compareTo(wordB2);
});

答案 1 :(得分:1)

您可以通过创建列表流来完成手头的任务,将String a = "15.5+0.5"; Double b = Double.parseDouble(a); System.out.println(b); 对象传递给Comparator方法以定义排序键,然后收集它变成sorted

用数字比较:

ArrayList

按字符串比较:

txtline = txtline.stream()
                 .sorted(Comparator.comparingLong((String e) -> Long.parseLong(e.split(" ")[1])))                             
                 .collect(Collectors.toCollection(ArrayList::new));