2016-12-18 3 views
1
//Sorting userDefined object from ArrayList<>...  

import java.io.*; 
import java.util.*; 

class Song implements Comparable<Song>{ 
    String title; 
    String movie; 
    String rating; 

    public int compareTo(Song s){ 
     //System.out.println(getTitle()+" "+s.getTitle()); 
     /*The upper comment is for testing purpose, 
     *because i wanted to see whats the value getTitle() compares.. 
     *but i couldn't understand. 
     */ 
     return getTitle().compareTo(s.getTitle()); 
    } 

    public Song(String t, String m, String r){ 
    //R.I.P. Naming Convention. 
     title = t; 
     movie = m; 
     rating = r; 
    } 

    public String getTitle(){ 
     return title; 
    } 

    public String toString(){ 
     return title; 
    } 
} 

class ArrayListDemo{ 
    ArrayList<Song> songsList = new ArrayList<Song>(); 
    public static void main(String[] args){ 
     new ArrayListDemo(); 
    } 

    public ArrayListDemo(){ 
     getSongs(); 
     System.out.println(songsList); 
     Collections.sort(songsList); 
     System.out.println(songsList); 
    } 

    public void getSongs(){ 
     try{ 
      File file = new File("SongsList.txt"); 
      //check below for SongsList.txt 
      BufferedReader reader = new BufferedReader(new FileReader(file)); 
      String line = null; 
      while((line = reader.readLine()) != null){ 
       addSong(line); 
      } 
     } catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 

    public void addSong(String lineToParse){ 
     String[] token = lineToParse.split("/"); 
     Song nextSong = new Song(token[0], token[1], token[2]); 
     songsList.add(nextSong); 
    } 
} 

SongsList.txt 
Soch Na Sake/Airlift/9.1 
Jeena/Badlapur/8.7 
Tere Sang Yaara/Rustom/8.8 
Aayat Ki Tarah/BaajiravMastaani/7.9 
Ikk Kudi/UdtaPunjab/7.5 
Tay Hai/Rustom/7.8 

Output:- 
Before Sorting... 
[Soch Na Sake , Jeena , Tere Sang Yaara , Aayat Ki Tarah , Ikk Kudi , Tay Hai ] 

After Sorting... 
[Aayat Ki Tarah , Ikk Kudi , Jeena , Soch Na Sake , Tay Hai , Tere Sang Yaara ] 

주의 - 초보자 영어 전진 !!!title.compareTo (a.title())의 장면을 이해하는 데 도움이됩니다. codeInside

그래서 내 프로그램의 작동하고 ... 참조 : -HeadFirstJava 2, JukeBox3 페이지 아뇨 550

그래서 문제에오고 ..

나는 그들의 대부분을 이해 ... 그러나 이것은 OO .. 내 마음이 롤링되는 경우

public int compareTo(Song s){ 
    return getTitle().compareTo(s.getTitle()); 
} 

인 getTitle() & s.getTitle()

입니다210 getTitle() 값을 가져 와서 비교 ... 좋아, 그 compareTo() 비교 문자열을 알고 있지만 또한 -1,0,1 (<, =) 규칙, 것을 알고 나를 크랙킹하는 것은 getTitle()이 값을 얻는 곳에서 시작됩니다. 및 한 가지 더 ... 책에 쓰여 있듯이 ...

Collections.sort (songsList);

이 메서드가 호출되면 sort 메서드는 songsList에서 compareTo() 메서드로 요소를 보냅니다. ..e sort()가 보낸 요소의 s.getTitle() = title을 의미합니다. 권리 ?

그러나 첫 번째 getTitle()은 반환 후 .compareTo() 앞에있는 값을 가져옵니다. 친절하게 나를 여기에 도움이

는 어디에있는() 인 getTitle 값 비교 얻는 것을 내가 알고 싶은 간단한 단어에서 문서, 다른 답변, 지난 2 일에 내가 할 수있는 모든 ....

를 확인했습니다.

+1

* "getTitle()이 값을 가져 오는 곳"* compareTo가 호출 된 인스턴스에서 마치'return this.getTitle(). compareTo (s) .getTitle());'('this.'에주의하십시오.) –

+0

나는 네가 말한 것을 가지고있다. 그러나 내가 분명치 않은 것은 this.getTitle()이 값을 얻는 곳에서 나온 것인가? 나는 this.getTitle()의 값을 출력했다. 그리고 그것은 songsList의 두 번째 요소의 제목이었습니다. –

답변

0

public int compareTo(Song s)은 2 Song 개체를 비교하는 데 사용됩니다. 그 중 하나는 메서드가 호출되는 메서드이고 다른 메서드는 인수로 전달되는 메서드입니다. 예를 들어

: s.getTitle()s2의 타이틀을 리턴 줘야하는 동안 본 실시 예에서는

Song s1 = ... 
Song s2 = ... 
int s1.compareTo(s2); 

, getTitle()public int compareTo(Song s)의 본문은 s1의 타이틀을 리턴한다.

Collections.sort(songsList);은 항상 compareTo을 사용하여 2 Song 개의 개체를 비교합니다. 그 중 하나는 메서드를 호출하고 다른 하나는 인수로 전달됩니다.

+0

좋아요, 그래서 내 프로그램에서 ... 노래 목록의 첫 번째 요소는 인수로 사용되며 두 번째 요소는 메서드가 호출되는 것을 의미합니다. –

+0

@ Mr.PooP 그것은 Collections.sort()의 구현에 달려있다. 'Collections.sort()'는 다중 비교를 수행하고 매번 비교할 두 개의'Song'을 결정합니다. – Eran

+0

좋아요, 당신이 말한 것을 가지고 여기저기서 조금 놀았고 이제 다른 멍청한 질문이 생겼습니다 ... getTitle()을 s.getTitle()로 변경하면 두 개의 동일한 객체를 비교할 수 있습니다 ... 즉 s.getTitle()을 반환합니다. .compareTo (s.getTitle()); 목록을 정렬하지 않았습니다. 좋아, 그 이유는 동일한 객체 비교 때문입니다. 그래서 내 질문에 s.getTitle()에서 's'제거 compareTo() 메서드를 비교할 다른 개체를 제공하는 무엇입니까? –