을 PostgreSQL에 전달하고 올바른 순서로 데이터가 다시 들어오는 지 확인하는 통합 테스트를 작성하고 있습니다. 나는이 통합 테스트를 Java로 작성하고 있으며 String.compareTo
메소드는 PostgreSQL과 다르게 정렬하는 것으로 보입니다.PostgreSQL과 같은 방법으로 String을 정렬하는 Comparator를 어떻게 만들 수 있습니까?
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import org.junit.Test;
import java.util.List;
import static junit.framework.Assert.assertEquals;
public class PostgresqlSortOrderTest {
@Test
public void whenJavaSortsStringsThenItIsTheSameAsWhenPostgresqlSortsStrings() {
List<String> postgresqlOrder = Lists.newArrayList("a", "A", "b", "c", "d", "D");
Ordering<String> ordering = new Ordering<String>() {
@Override
public int compare(String left, String right) {
return left.compareTo(right);
}
};
List<String> javaOrdering = ordering.sortedCopy(postgresqlOrder);
assertEquals(postgresqlOrder, javaOrdering);
}
}
:
a
A
b
c
d
D
은 그때 자바 물건을 정렬하는 방식이 비교하기 위해 단위 테스트를 작성 :
SELECT regexp_split_to_table('D d a A c b', ' ') ORDER BY 1;
그것은이로 응답 : 내 PostgreSQL 데이터베이스에서이 작업을 실행 이 출력으로 실패했습니다 :
Expected :[a, A, b, c, d, D] //postgresql
Actual :[A, D, a, b, c, d] //java
나는이 용어에 대해 아주 무지하다. 나는 서로 다른 String 종류의 이름을 알고 싶습니다. 그래서 나는 더 잘 의사 소통을 할 수 있습니다. 하지만 더 중요한 것은 PostgreSQL처럼 Java 정렬을 어떻게 만들 수 있습니까?
Java는 ASCII 순서로 수행합니다. PG는 알파벳순으로 같은 문자를 대문자와 소문자로 순서대로 정렬 한 것 같습니다 (낮은
@DaveNewton 사실, 이미 비교기를 가지고있는 라이브러리가 있다면, 직접 쓰는 것보다는 사용하는 것이 좋습니다. 너는 그걸 알고 있니? –
표준 API의 String.CASE_INSENSITIVE_ORDER입니다. –