2015-01-05 2 views
0

파일 (파일 목록)을 정렬하고 이름, 크기, 수정 한 날짜, 크기, 유형 및 기타 조건에 따라 사용자 입력에 의존하는 작업이 미래에 추가 될 수 있습니다.여러 비교기를 저장할 클래스

사용자 입력은 "DIR/종류 = esdn"종류의 프로그램은 크기에 따라 종류를 결정할 수없는 확장에 의해 의미 (확장자, 크기, 날짜, 이름) ...

나는 그것을 thougth 그래서 경우 같은 클래스 또는 람다 식으로 모든 비교기를 가지고 혼란, 그래서 것 내가 모든 비교 코드가

public class Comparisons { 

    public class Ext implements Comparator<File> { 
     ... 
    } 

    public class Size implements Comparator<File> { 
     ... 
    } 

    public class Date implements Comparator<File> { 
     ... 
    } 

    public class Name implements Comparator<File> { 
     ... 
    } 

    public class Type implements Comparator<File> { 
     ... 
    } 
} 

될 것이라고 새로운 제공자 라이선스 계약을 만들 생각을했다 그리고 나는 그것을 어떻게 실행하는 생각이 모든하지만, 외부 클래스를 먼저 만들지 않고 새로운 내부 클래스를 만드는 방법을 찾지 못하는 것 같습니다. 그것은 저에게 Java가 sytax 설탕에 많은 도움이되는 것처럼 보일 것이라고 생각합니다. 가장 좋은 대안은 새로운 패키지가 될 것입니다. 코드의

나머지 첫 글자

private boolean sort(String substring, List<File> fin) { 
     Comparator<File> k = null; 

     char in = substring.toLowerCase().charAt(0); 

     switch (in) { 
     case n: 
      k = Comparisons.new Name(); 
      break; 
     case e: 
      k = Comparisons.new Ext(); 
      break; 
     case s: 
      k = Comparisons.new Size(); 
      break; 
     case d: 
      k = Comparisons.new Date(); 
      break; 
     case t: 
      k = Comparisons.new Type(); 
      break; 
     default: 
      break; 
     } 
    ... 
    } 

나는이 작동하지 않습니다 알고 있지만 그게 내가 무엇을 달성하고자하는의 일반적인 생각으로 정렬 재귀 함수 될 것이다.

고맙습니다.

+0

"동일한 클래스 또는 람다 식으로 모든 비교기를 사용하는 것이 지저분 할 것"이라고 생각했습니다. 람다 경로가 최상의 옵션 인 것 같습니다. 특히 메소드 참조를 사용하는 경우에 그렇습니다. –

+0

코드 스 니펫은 실행 가능한 웹 언어 예제입니다. 대신 코드 샘플'{}'버튼을 사용하십시오. – Radiodef

+0

나는 코드 재사용 성이 더 좋을 것이라고 생각했다. 그리고 마지막에 많은 클래스 나 메소드를 추가하는 것은 분명히 이해가되어 유사한 작업을하기 때문에 나에게 지저분하다고 느낀다. 끝까지 추가하는 것이 너무 좋지는 않지만 나일지도 몰라. – dantex47

답변

3

당신이 사용할 수있는 enum :

public enum FileComparator implements Comparator<File> { 
    DateComparator { 

     @Override 
     public int compare(File o1, File o2) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

    }, 
    SizeComparator { 

     @Override 
     public int compare(File o1, File o2) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

    }, 

    NameComparator { 
     @Override 
     public int compare(File o1, File o2) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 
    } 
} 

enum의 각 요소는 compare 방법의 자체 버전을 가질 수 있고 당신은 어떤 클래스를 만들 필요가 없습니다,하지만 여전히 당신이 정상처럼 사용할 수 있습니다 클래스 :

Comparator<File> comp = FileComparator.NameComparator; 
//use the comparator 
관련 문제