diff --git a/java-compare/src/main/java/com/advenoh/model/Vod.java b/java-compare/src/main/java/com/advenoh/model/Vod.java new file mode 100644 index 00000000..73aedb21 --- /dev/null +++ b/java-compare/src/main/java/com/advenoh/model/Vod.java @@ -0,0 +1,17 @@ +package com.advenoh.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@AllArgsConstructor +@ToString +public class Vod { + private Long vodId; + private String vodTitle; + private Integer dealNo; + +} diff --git a/java-compare/src/test/java/com/advenoh/CompareTest.java b/java-compare/src/test/java/com/advenoh/CompareTest.java index 8d04aee5..a8bab30f 100644 --- a/java-compare/src/test/java/com/advenoh/CompareTest.java +++ b/java-compare/src/test/java/com/advenoh/CompareTest.java @@ -2,6 +2,7 @@ import com.advenoh.model.ComparablePlayer; import com.advenoh.model.ComparatorPlayer; +import com.advenoh.model.Vod; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; @@ -108,4 +109,55 @@ public void thenComparing_test() { assertThat(sortedPlayers).isSortedAccordingTo(ComparatorPlayer::compareByScoreThenName); } + + @Test + public void 데이터_필드_값의_존재여부에_따라_List_정렬하기() { + List vodSamples = getVodSamples(10); + vodSamples.forEach(it -> log.info("it : {}", it)); + + Comparator comparator = (o1, o2) -> { + if (o1.getDealNo() == null && o2.getDealNo() == null) + return 0; + if (o1.getDealNo() == null) + return 1; + if (o2.getDealNo() == null) + return -1; + return 0; + }; + + List sortedVods = vodSamples.stream() + .sorted(comparator) + .collect(Collectors.toList()); + + System.out.println(); + sortedVods.forEach(it -> log.info("it : {}", it)); + + //위쪽 : dealNo O + //아래쪽: dealNo X + int size = sortedVods.size(); + for (int i = 0; i < size; i++) { + if (i < size - 2) { + assertThat(sortedVods.get(i).getDealNo()).isNotNull(); + } else { + assertThat(sortedVods.get(i).getDealNo()).isNull(); + } + } + + } + + private List getVodSamples(int max) { + List vods = new ArrayList<>(); + Integer dealNo; + Vod vod; + + for (int i = 0; i < max; i++) { + dealNo = 1111 + i; + vod = new Vod(i + 1L, "vod" + i, dealNo); + if (dealNo == 1115 || dealNo == 1118) { + vod.setDealNo(null); + } + vods.add(vod); + } + return vods; + } }