Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating Map composed of 2 Lists using stream().collect in Java

As for example, there are two lists:

List<Double> list1 = Arrays.asList(1.0, 2.0);
List<String> list2 = Arrays.asList("one_point_zero", "two_point_zero");

Using Stream, I want to create a map composed of these lists, where list1 is for keys and list2 is for values. To do it, I need to create an auxiliary list:

List<Integer> list0 = Arrays.asList(0, 1);

Here is the map:

Map<Double, String> map2 = list0.stream()
                .collect(Collectors.toMap(list1::get, list2::get));

list0 is used in order list1::get and list2::get to work. Is there a simpler way without creation of list0? I tried the following code, but it didn't work:

Map<Double, String> map2 = IntStream
                .iterate(0, e -> e + 1)
                .limit(list1.size())
                .collect(Collectors.toMap(list1::get, list2::get));
like image 752
sva605 Avatar asked Oct 10 '16 16:10

sva605


1 Answers

Instead of using an auxiliary list to hold the indices, you can have them generated by an IntStream.

Map<Double, String> map = IntStream.range(0, list1.size())
            .boxed()
            .collect(Collectors.toMap(i -> list1.get(i), i -> list2.get(i)));
like image 146
svarog Avatar answered Oct 15 '22 11:10

svarog