Skip to content

Commit 0040324

Browse files
author
Arpit Bhardwaj
committed
Generics in Classes and Methods
1 parent eb3b7fa commit 0040324

5 files changed

Lines changed: 153 additions & 1 deletion

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.ab.generics.classes_and_interfaces;
2+
3+
public class SortedPair<T extends Comparable<T>> {
4+
private final T first;
5+
private final T second;
6+
7+
public SortedPair(T left, T right) {
8+
//if(left.compareTo(right)<0){ //runtime error
9+
if(left.compareTo(right)<0){
10+
this.first = left;
11+
this.second = right;
12+
}else{
13+
first = right;
14+
second = left;
15+
}
16+
}
17+
18+
public T getFirst() {
19+
return first;
20+
}
21+
22+
public T getSecond() {
23+
return second;
24+
}
25+
}

src/main/java/com/ab/generics/classes_and_interfaces/SortingExample.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public static void main(String[] args) {
1919

2020
System.out.println(madMen);
2121

22-
Collections.sort(madMen,new AgeComparator());
22+
Collections.sort(madMen, new AgeComparator());
2323

2424
System.out.println(madMen);
2525

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.ab.generics.methods;
2+
3+
import com.ab.generics.classes_and_interfaces.AgeComparator;
4+
import com.ab.generics.model.Person;
5+
6+
import java.util.ArrayList;
7+
import java.util.Comparator;
8+
import java.util.List;
9+
10+
//import static java.util.Collections.min;
11+
12+
public class ListMinimum {
13+
public static void main(String[] args) {
14+
Person donDrapper = new Person("Don Drapper", 89);
15+
Person peggyOlson = new Person("Peggy Olson", 65);
16+
Person bertCooper = new Person("Bert Cooper", 100);
17+
18+
List<Person> madMen = new ArrayList<>();
19+
madMen.add(donDrapper);
20+
madMen.add(peggyOlson);
21+
madMen.add(bertCooper);
22+
23+
System.out.println(madMen);
24+
25+
final Person youngestPerson = (Person) min(madMen, new AgeComparator());
26+
27+
/*final Person youngestPerson = (Person) min(madMen, new Comparator<Integer>() {
28+
@Override
29+
public int compare(Integer o1, Integer o2) {
30+
return 0;
31+
}
32+
});*/ //leads to class cast exception
33+
34+
System.out.println(youngestPerson);
35+
}
36+
37+
private static Object min(List values, Comparator comparator) {
38+
if (values.isEmpty()) {
39+
throw new IllegalArgumentException("List is empty, cannot find minimum");
40+
}
41+
42+
Object lowestElement = values.get(0);
43+
for (int i = 1; i < values.size(); i++) {
44+
final Object element = values.get(i);
45+
if (comparator.compare(element, lowestElement) < 0) {
46+
lowestElement = element;
47+
}
48+
}
49+
return lowestElement;
50+
}
51+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.ab.generics.methods;
2+
3+
import com.ab.generics.classes_and_interfaces.AgeComparator;
4+
import com.ab.generics.model.Person;
5+
6+
import java.util.ArrayList;
7+
import java.util.Comparator;
8+
import java.util.List;
9+
10+
public class ListMinimumGeneric {
11+
public static void main(String[] args) {
12+
Person donDrapper = new Person("Don Drapper", 89);
13+
Person peggyOlson = new Person("Peggy Olson", 65);
14+
Person bertCooper = new Person("Bert Cooper", 100);
15+
16+
List<Person> madMen = new ArrayList<>();
17+
madMen.add(donDrapper);
18+
madMen.add(peggyOlson);
19+
madMen.add(bertCooper);
20+
21+
System.out.println(madMen);
22+
23+
final Person youngestPerson = min(madMen, new AgeComparator());
24+
25+
/*final Person youngestPerson = min(madMen, new Comparator<Integer>() {
26+
@Override
27+
public int compare(Integer o1, Integer o2) {
28+
return 0;
29+
}
30+
});*/ //leads to compile time error
31+
System.out.println(youngestPerson);
32+
33+
List<Integer> numbers = new ArrayList<>();
34+
numbers.add(24);
35+
numbers.add(45);
36+
numbers.add(12);
37+
38+
System.out.println(min(numbers,Integer::compare));
39+
40+
}
41+
private static <T> T min(List<T> values, Comparator<T> comparator) {
42+
if (values.isEmpty()) {
43+
throw new IllegalArgumentException("List is empty, cannot find minimum");
44+
}
45+
46+
T lowestElement = values.get(0);
47+
for (int i = 1; i < values.size(); i++) {
48+
final T element = values.get(i);
49+
if (comparator.compare(element, lowestElement) < 0) {
50+
lowestElement = element;
51+
}
52+
}
53+
return lowestElement;
54+
}
55+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.ab.generics.classes_and_interfaces;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.Assert.*;
6+
7+
public class SortedPairTest {
8+
9+
@Test
10+
public void shouldRetainOrderOfOrderedPair(){
11+
SortedPair<Integer> pair = new SortedPair<>(1,2);
12+
assertEquals(1,pair.getFirst().intValue());
13+
assertEquals(2,pair.getSecond().intValue());
14+
}
15+
@Test
16+
public void shouldFlipOrderOfMisorderedPair(){
17+
SortedPair<Integer> pair = new SortedPair<>(2,1);
18+
assertEquals(1,pair.getFirst().intValue());
19+
assertEquals(2,pair.getSecond().intValue());
20+
}
21+
}

0 commit comments

Comments
 (0)