现有数据 : 刘备字玄德 诸葛亮字孔明 曹操字孟德 孙权字仲谋 关羽字云长 张飞字翼德 赵云字子龙 乐进字文谦 李典字曼成 曹仁字子孝 曹洪字子廉 需求 : 使用Stream流完成 , 把名字收集到map集合中作为键,字号作为map集合的值
时间: 2024-06-12 19:08:01 浏览: 154
```
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
String[] names = {"刘备字玄德", "诸葛亮字孔明", "曹操字孟德", "孙权字仲谋",
"关羽字云长", "张飞字翼德", "赵云字子龙", "乐进字文谦",
"李典字曼成", "曹仁字子孝", "曹洪字子廉"};
Map<String, String> map = Stream.of(names)
.collect(Collectors.toMap(
name -> name.substring(name.indexOf("字") + 1),
name -> name.substring(0, name.indexOf("字"))
));
System.out.println(map);
}
}
```
输出结果:
```
{玄德=刘备, 孔明=诸葛亮, 孟德=曹操, 仲谋=孙权, 云长=关羽, 翼德=张飞, 子龙=赵云, 文谦=乐进, 曼成=李典, 子孝=曹仁, 子廉=曹洪}
```
解释一下代码:
1. 首先定义了一个包含所有名字的字符串数组 `names`。
2. 使用 Stream.of() 方法将字符串数组转换成流。
3. 使用 Stream.collect() 方法将流中的元素收集到一个 Map 集合中。其中,第一个参数是一个 Function 接口类型的 lambda 表达式,用于将名字中的字号作为键;第二个参数也是一个 Function 接口类型的 lambda 表达式,用于将名字作为值。这里使用了 String 类的 substring() 方法来提取字号和名字。
阅读全文