1 | package uk.co.zonetora.fj.util; |
2 | |
3 | import java.util.ArrayList; |
4 | import java.util.Iterator; |
5 | import java.util.List; |
6 | |
7 | import static java.lang.Math.*; |
8 | |
9 | public class ListUtil { |
10 | |
11 | public static <X,Y> List<X> mapFst(List<Tuple<X,Y>> list) { |
12 | List<X> outList = new ArrayList<X>(); |
13 | |
14 | for(Tuple<X,?> t : list) { |
15 | outList.add(t.getX()); |
16 | } |
17 | |
18 | return outList; |
19 | |
20 | } |
21 | |
22 | public static <X,Y> List<Y> mapSnd(List<Tuple<X,Y>> list) { |
23 | List<Y> outList = new ArrayList<Y>(); |
24 | |
25 | for(Tuple<?,Y> t : list) { |
26 | outList.add(t.getY()); |
27 | } |
28 | |
29 | return outList; |
30 | } |
31 | |
32 | public static <X,Y> List<Tuple<X,Y>> zip(List<X> xs, List<Y> ys) { |
33 | Iterator<X> xi = xs.iterator(); |
34 | Iterator<Y> yi = ys.iterator(); |
35 | |
36 | List<Tuple<X,Y>> out = new ArrayList<Tuple<X,Y>>(min(xs.size(), ys.size())); |
37 | |
38 | while(xi.hasNext()) { |
39 | if(yi.hasNext()) { |
40 | out.add(new Tuple<X,Y>(xi.next(), yi.next())); |
41 | continue; |
42 | } |
43 | break; |
44 | } |
45 | |
46 | return out; |
47 | } |
48 | } |