2015-08-21 2 views
0

Я пытаюсь реализовать treeet с пользовательской функцией сортировки. Я передал объект компаратора, который имеет логику сортировки.Реализация Treeset с пользовательской функцией сортировки

import java.util.Comparator; 
import java.util.TreeSet; 

public class MySetWithCompr { 

    public static void main(String a[]){ 

     TreeSet<String> ts = new TreeSet<String>(new MyComp()); 
     ts.add("Test1"); 
     ts.add("Test2"); 
     ts.add("Test3"); 
     ts.add("Test4"); 
     System.out.println(ts); 
    } 
} 

class MyComp implements Comparator<String>{ 

    @Override 
    public int compare(String str1, String str2) { 
     return str1.compareTo(str2); 
    } 

} 

выше программа дает мне ниже выход

[Test1, Test2, Test3, Test4] 

Пожалуйста, подсказывают, как реализовать компаратор логику так, что результат будет обратный

Expected Result : [Test4, Test3, Test2, Test1] 

ответ

0

Если вы хотите по убыванию Есть два способа :

Первое:

class MyComp implements Comparator<String> { 
    @Override 
    public int compare(String str1, String str2) { 
     return str2.compareTo(str1); 
    } 
} 

Второе:

class MyComp implements Comparator<String> { 
    @Override 
    public int compare(String str1, String str2) { 
     return -1 * str1.compareTo(str2); 
    } 
} 
+0

Нет необходимости в умножении. Это может быть просто '- str1.compareTo (str2)'. – RealSkeptic

+0

Да, это правда, но это просто вопрос синтаксиса, который полагается на предпочтения каждого из них –

+0

спасибо :) @ Jib'z – Kiran

2

Try:

class MyComp implements Comparator<String> { 

    @Override 
    public int compare(String str1, String str2) { 
     return str2.compareTo(str1); 
    } 

} 
4

I е вы используете Java 8, вы можете просто написать:

Set<String> ts = new TreeSet<>(new MyComp().reversed()); 

Существует та же функциональность, прежде чем Java 8 (с Java 5):

Set<String> ts = new TreeSet<String>(Collections.reverseOrder(new MyComp())); 
Смежные вопросы