1+ package com .baeldung .comparelong ;
2+
3+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4+
5+ import java .util .ArrayList ;
6+ import java .util .Arrays ;
7+ import java .util .Collections ;
8+ import java .util .Comparator ;
9+ import java .util .List ;
10+ import java .util .stream .Collectors ;
11+
12+ import org .junit .Test ;
13+
14+ public class CompareLongWithSortUnitTest {
15+
16+ @ Test
17+ public void givenLongList_whenUseCollectionSortToCompare_thenReturnAsc () {
18+ List <Long > numbers = new ArrayList <>(Arrays .asList (500L , 200L , 800L ));
19+ Collections .sort (numbers );
20+ assertEquals (Arrays .asList (200L , 500L , 800L ), numbers );
21+ }
22+
23+ @ Test
24+ public void givenLongList_whenUseCollectionSortToCompareWithReverseComparator_thenReturnDsc () {
25+ List <Long > numbers = new ArrayList <>(Arrays .asList (500L , 200L , 800L ));
26+ Collections .sort (numbers , Comparator .reverseOrder ());
27+ assertEquals (Arrays .asList (800L , 500L , 200L ), numbers );
28+ }
29+
30+ @ Test
31+ public void givenLongList_whenUseCustomComparator_thenReturnExpectedResult () {
32+ List <Long > numbers = new ArrayList <>(Arrays .asList (500L , 200L , 800L ));
33+ long target = 400L ;
34+ Collections .sort (numbers , (a , b ) -> {
35+ long distanceA = Math .abs (a - target );
36+ long distanceB = Math .abs (b - target );
37+ return Long .compare (distanceA , distanceB );
38+ });
39+ assertEquals (Arrays .asList (500L , 200L , 800L ), numbers );
40+ }
41+
42+ @ Test
43+ public void givenLongList_whenUseMultipleCriteriaToCompare_thenReturnExpectedResult () {
44+ List <Long > numbers = new ArrayList <>(Arrays .asList (-500L , 200L , -800L , 300L ));
45+ Collections .sort (numbers , Comparator .comparingLong (n -> Math .abs ((Long ) n ))
46+ .thenComparingLong (n -> (Long ) n ));
47+
48+ assertEquals (Arrays .asList (200L , 300L , -500L , -800L ), numbers );
49+ }
50+
51+ @ Test
52+ public void givenLongListWithNull_whenUsingNullsFirst_thenReturnNullAtFirstPosition () {
53+ List <Long > numbers = new ArrayList <>(Arrays .asList (500L , null , 200L , 800L ));
54+ Collections .sort (numbers , Comparator .nullsFirst (Comparator .naturalOrder ()));
55+ assertEquals (Arrays .asList (null , 200L , 500L , 800L ), numbers );
56+ }
57+
58+ @ Test
59+ public void givenLongListWithNull_whenUsingNullsLast_thenReturnNullAtLastPosition () {
60+ List <Long > numbers = new ArrayList <>(Arrays .asList (500L , null , 200L , 800L ));
61+ Collections .sort (numbers , Comparator .nullsLast (Comparator .naturalOrder ()));
62+ assertEquals (Arrays .asList (200L , 500L , 800L , null ), numbers );
63+ }
64+
65+ @ Test
66+ public void givenObjectWithLongAttribute_whenComparingObjectWithLongValue_thenReturnExpectedResult () {
67+ List <Transaction > transactions = new ArrayList <>();
68+ transactions .add (new Transaction (500L ));
69+ transactions .add (new Transaction (200L ));
70+ transactions .add (new Transaction (800L ));
71+ Collections .sort (transactions , Comparator .comparingLong (Transaction ::getAmount ));
72+ assertEquals (Arrays .asList (200L , 500L , 800L ), transactions .stream ()
73+ .map (Transaction ::getAmount )
74+ .collect (Collectors .toList ()));
75+ }
76+
77+ }
78+
79+ class Transaction {
80+
81+ private Long amount ;
82+
83+ public Transaction (Long amount ) {
84+ this .amount = amount ;
85+ }
86+
87+ public Long getAmount () {
88+ return amount ;
89+ }
90+ }
0 commit comments