From ab35a996f8e8aeb7f9537cadc071dfdcb99c2fc1 Mon Sep 17 00:00:00 2001 From: frankyoh Date: Sun, 30 Aug 2020 07:26:40 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[TUT-48]=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EA=B0=92=EC=9D=98=20=EC=A1=B4=EC=9E=AC?= =?UTF-8?q?=EC=97=AC=EB=B6=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20=EC=98=88=EC=A0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/advenoh/model/Vod.java | 17 ++++++ .../test/java/com/advenoh/CompareTest.java | 52 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 java-compare/src/main/java/com/advenoh/model/Vod.java 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; + } } From 32a0c24ffe2fda5a366a75b6abc0056c281b26d6 Mon Sep 17 00:00:00 2001 From: frankyoh Date: Sun, 30 Aug 2020 07:26:40 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[TUT-48]=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EA=B0=92=EC=9D=98=20=EC=A1=B4=EC=9E=AC?= =?UTF-8?q?=EC=97=AC=EB=B6=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20=EC=98=88=EC=A0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/advenoh/model/Vod.java | 17 ++++++ .../test/java/com/advenoh/CompareTest.java | 52 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 java-compare/src/main/java/com/advenoh/model/Vod.java 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; + } }