Skip to content

Commit b7613d1

Browse files
committed
Added solution for order prioritization using comparator
1 parent 0ef32b0 commit b7613d1

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.eprogrammerz.examples.algorithm.crackingCoding;
2+
3+
import org.junit.Test;
4+
5+
import java.util.Arrays;
6+
import java.util.List;
7+
import java.util.stream.Collectors;
8+
9+
import static org.junit.Assert.assertEquals;
10+
11+
public class OrderPrioritization {
12+
public List<String> prioritize(List<String> orders) {
13+
List<String> nonPrimes = orders.stream().filter(o -> isNum(o.split(" ")[1])).collect(Collectors.toList());
14+
15+
List<String> primes = orders.stream().filter(o -> !isNum(o.split(" ")[1]))
16+
.sorted(this::compareOrders).collect(Collectors.toList());
17+
18+
primes.addAll(nonPrimes);
19+
20+
return primes;
21+
}
22+
23+
private int compareOrders(String o1, String o2) {
24+
String[] split1 = o1.split(" ", 2);
25+
String meta1 = split1[1];
26+
String id1 = split1[0];
27+
28+
String[] split2 = o2.split(" ", 2);
29+
String meta2 = split2[1];
30+
String id2 = split2[0];
31+
32+
if (meta1.equals(meta2)) {
33+
return id1.compareTo(id2);
34+
}
35+
return meta1.compareTo(meta2);
36+
}
37+
38+
private boolean isNum(String str) {
39+
try {
40+
Integer.parseInt(str);
41+
} catch (NumberFormatException ex) {
42+
return false;
43+
}
44+
return true;
45+
}
46+
47+
@Test
48+
public void testPrioritize() {
49+
List<String> orders = Arrays.asList("id1 233 232 232", "12d amazon kindle", "13d amazon kindle", "id2 54352 23", "id6 amazon book");
50+
51+
List<String> actual = prioritize(orders);
52+
53+
List<String> expected = Arrays.asList("id6 amazon book", "12d amazon kindle", "13d amazon kindle", "id1 233 232 232", "id2 54352 23");
54+
assertEquals(expected, actual);
55+
}
56+
}

0 commit comments

Comments
 (0)