2017-04-21 2 views
0

Array 객체에 객체를 저장하려고합니다. Item 클래스에는 field1이라는 부동 필드가 있습니다. itemsList에서 항목 개체를 field1의 순서로 검색하고 싶습니다.클래스 객체의 ArrayList를 float 필드로 정렬

List<Item> itemsList = new ArrayList<Item>(); 
itemsList.add(new Item(...)); 

이것은 내가 뭘하려 :

public class Item implements Comparable { 

    //... 

    public float compareTo(Item it) 
    { 
     return(similarity - it.similarity); 
    } 
} 

List<Item> sortedItems = Collections.sort(itemsList); 

문제는 내가 float있는 동안 compareToint을 반환해야한다는 것입니다. 그렇다면 어떤 접근 방식을 적용하여 float 값을 정렬해야합니까?

+0

float를 int로 변환하려고 했습니까? –

+0

이 링크를 참조하십시오 : https://www.tutorialspoint.com/java/util/arrays_sort_float.htm – Marievi

+1

그러면 같은 번호로 돌아갈 수 있습니다. – Ishnark

답변

1

메소드 서명은 다음과 같아야

public int compareTo(Item it) 

를 대신 float를 반환. 현재로서는 Comparable 인터페이스를 구현하지 않습니다.

가장 쉬운 구현은 다음과 같습니다 campareTo()의 정확한 반환 값은 중요하지 않습니다

public int compareTo(Item it) { 
    return Float.compare(similarity, it.similarity); 
} 
+0

'public int compareTo (Item it) { 의 경우 Float.compare (similarity, it.similarity)를 반환합니다. }','메소드가 오버라이드하지 않습니다 ... '오류가 발생합니다. – Dinosaurius

+0

예, Comparable에서 일반 비트를 제거했습니다. 클래스를'public class Item implements Comparable '으로 변경하면 잘 동작합니다. – assylias

0

. 0보다 작거나 정확히 0이거나 0보다 큰 값입니다. 예를 들어 0보다 작은 모든 차이에 대해 -1을 반환하고 0보다 큰 모든 차이에 대해 -1을 반환 할 수 있습니다.

Float은 이미 비교 가능합니다. 이것은 쉬울 것입니다 : similarity.compareTo(it.similarity)

0

compareTo는 가능한 3 개의 값만 반환한다고 가정합니다. 1, 0, -1이다. 1은 객체가 비교 대상보다 크다는 것을 의미하고, 0은 같음을 의미하고 -1은 객체가 비교 대상보다 작은 것을 의미합니다. 따라서 compareTo 메서드는 매우 간단해야합니다.

public int compareTo(Item it) 
    { 
     if(this.field1 < it.getField1()) { 
      return -1; 
     } 
     else if(this.field1 > it.getField1()) { 
      return 1; 
     } 
     else { 
     return 0; 
     } 
    } 
+0

클래스가 Comparable을 구현하는 동안 나는'@ Override'를 할당 할 수 없습니다. – Dinosaurius

+0

그게 무슨 소리 죠? – victor

+1

@victor'compareTo'는 단지 -1, 0, 1이 아닌'int'를 반환 할 수 있습니다. – assylias

관련 문제