使用 Java 中的列表值将 List<String> 转换为 Map<String, String> 8
Convert a List<String> to Map<String, String> using the list values in Java 8
我有一个列表,我正在尝试使用 Java 8.
将其转换为 Map
名单如下
List<String> data = Arrays.asList("Name", "Sam", "Class", "Five", "Medium", "English")
我想要一个 Map 这样键值对就像
{{"Name", "Sam"}, {"Class", "Five"}, {"Medium", "English"}}
我试图在 Java 8 中实现这一点并尝试使用 Instream.range() 但没有得到确切的结果。
IntStream.range(0, data.size() - 1).boxed()
.collect(Collectors.toMap(i -> data.get(i), i -> data.get(i + 1)));
上面代码的问题是结果也给出了输出 {"Sam", "Class"}
这里的问题是,您要遍历 每个 索引,而您只想遍历所有其他索引。您可以过滤奇数,将 .filter(i->i%2==0)
添加到您的流中 - 或者使用 IntStream.iterate()
直接获取您想要的数字:
IntStream.iterate(0, i->i<data.size()-1,i->i+2)
这是一种方法。
- 从
0 to size/2
. 生成一系列值 i
- 然后使用
i*2
和 i*2 + 1
作为列表的索引。
List<String> data = Arrays.asList("Name", "Sam", "Class",
"Five", "Medium", "English");
Map<String, String> map = IntStream
.range(0,data.size()/2).boxed()
.collect(Collectors.toMap(i -> data.get(i*2),
i -> data.get(i*2+1)));
map.entrySet().forEach(System.out::println);
打印
Medium=English
Class=Five
Name=Sam
您必须每 2 个元素迭代一次,因此 步骤 是
3 等于 6(列表大小)/ 2(步长).
所以按步骤迭代而不是按元素迭代,你可以在收集阶段找到每个步骤的两个元素。这是示例:
IntStream.range(0, data.size() / 2)
.boxed()
.collect(Collectors.toMap(i -> data.get(i * 2), i -> data.get(i * 2 + 1)));
我有一个列表,我正在尝试使用 Java 8.
将其转换为 Map名单如下
List<String> data = Arrays.asList("Name", "Sam", "Class", "Five", "Medium", "English")
我想要一个 Map
{{"Name", "Sam"}, {"Class", "Five"}, {"Medium", "English"}}
我试图在 Java 8 中实现这一点并尝试使用 Instream.range() 但没有得到确切的结果。
IntStream.range(0, data.size() - 1).boxed()
.collect(Collectors.toMap(i -> data.get(i), i -> data.get(i + 1)));
上面代码的问题是结果也给出了输出 {"Sam", "Class"}
这里的问题是,您要遍历 每个 索引,而您只想遍历所有其他索引。您可以过滤奇数,将 .filter(i->i%2==0)
添加到您的流中 - 或者使用 IntStream.iterate()
直接获取您想要的数字:
IntStream.iterate(0, i->i<data.size()-1,i->i+2)
这是一种方法。
- 从
0 to size/2
. 生成一系列值 - 然后使用
i*2
和i*2 + 1
作为列表的索引。
i
List<String> data = Arrays.asList("Name", "Sam", "Class",
"Five", "Medium", "English");
Map<String, String> map = IntStream
.range(0,data.size()/2).boxed()
.collect(Collectors.toMap(i -> data.get(i*2),
i -> data.get(i*2+1)));
map.entrySet().forEach(System.out::println);
打印
Medium=English
Class=Five
Name=Sam
您必须每 2 个元素迭代一次,因此 步骤 是 3 等于 6(列表大小)/ 2(步长).
所以按步骤迭代而不是按元素迭代,你可以在收集阶段找到每个步骤的两个元素。这是示例:
IntStream.range(0, data.size() / 2)
.boxed()
.collect(Collectors.toMap(i -> data.get(i * 2), i -> data.get(i * 2 + 1)));