나는 값을 가진 Arraylist가 있습니다 :
was-2
it-2
the-2
times-2
of-2
best-1
최악-1
이 목록은 문자열 끝에있는 개수 값으로 정렬되었지만 (선택 정렬 사용) 이제 알파벳순으로 개수가 같은 단어를 정렬하고 싶습니다. 어떻게해야할지 모르겠습니다.
따라서 예상되는 출력은
[it - 2, of - 2, the - 2, times - 2, was - 2, best - 1, worst - 1]
에 문자열을 분할 \s+-\s+
하는 하나 이상의 (즉, 문자 공백을 의미 \s+
) 다음에 의해 -
차례로 한 뒤에 이상의 공백 문자를.
숫자 (두 번째) 부분의 내림차순에 대해 첫 번째 비교 수준을 수행 한 다음 첫 번째 부분의 오름차순에 대해 두 번째 수준의 비교를 수행합니다.
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String args[]) {
List<String> list = new ArrayList<>(
List.of("was - 2", "it - 2", "the - 2", "times - 2", "of - 2", "best - 1", "worst - 1"));
list.sort(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String[] s1Parts = s1.split("\\s+-\\s+");
String[] s2Parts = s2.split("\\s+-\\s+");
int i = Integer.compare(Integer.parseInt(s2Parts[1]), Integer.parseInt(s1Parts[1]));
if (i != 0) {
return i;
}
return s1Parts[0].compareTo(s2Parts[0]);
}
});
System.out.println(list);
}
}
산출:
[it - 2, of - 2, the - 2, times - 2, was - 2, best - 1, worst - 1]
참고 : 각 문자열의 두 부분이 항상로 구분되어 -
있으면로 분할 할 수 있습니다 s1.split(" - ");
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다