Java 8 Lambda表达式生成Map和多层嵌套Map攻略
在Java 8中,Lambda表达式为我们提供了一种简洁而强大的方式来处理集合数据。使用Lambda表达式,我们可以快速生成Map和多层嵌套Map。下面是一个详细的攻略,包含两个示例说明。
1. 使用Lambda表达式生成Map
要使用Lambda表达式生成Map,我们可以使用Collectors.toMap()
方法。该方法接受两个Lambda表达式作为参数,用于指定Map的键和值的生成方式。
示例1:将List转换为Map
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> fruits = Arrays.asList(\"apple\", \"banana\", \"orange\");
Map<String, Integer> fruitMap = fruits.stream()
.collect(Collectors.toMap(
fruit -> fruit, // 键的生成方式
fruit -> fruit.length() // 值的生成方式
));
System.out.println(fruitMap);
}
}
输出结果:
{apple=5, orange=6, banana=6}
示例2:将对象列表转换为Map
import java.util.*;
import java.util.stream.Collectors;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person(\"Alice\", 25),
new Person(\"Bob\", 30),
new Person(\"Charlie\", 35)
);
Map<String, Integer> ageMap = people.stream()
.collect(Collectors.toMap(
Person::getName, // 键的生成方式
Person::getAge // 值的生成方式
));
System.out.println(ageMap);
}
}
输出结果:
{Bob=30, Charlie=35, Alice=25}
2. 使用Lambda表达式生成多层嵌套Map
要生成多层嵌套Map,我们可以使用Collectors.groupingBy()
方法。该方法接受一个Lambda表达式作为参数,用于指定分组的条件。
示例3:将对象列表按照年龄分组,并生成多层嵌套Map
import java.util.*;
import java.util.stream.Collectors;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person(\"Alice\", 25),
new Person(\"Bob\", 30),
new Person(\"Charlie\", 35),
new Person(\"David\", 25)
);
Map<Integer, Map<String, List<Person>>> ageGroupMap = people.stream()
.collect(Collectors.groupingBy(
Person::getAge, // 分组条件
Collectors.groupingBy(Person::getName) // 内层Map的生成方式
));
System.out.println(ageGroupMap);
}
}
输出结果:
{25={Alice=[Person@1f32e575], David=[Person@3da1050a]}, 30={Bob=[Person@7f31245a]}, 35={Charlie=[Person@6d6f6e28]}}
在上述示例中,我们按照年龄将人员列表进行了分组,并生成了一个多层嵌套的Map。内层Map的键是人员的姓名,值是具有相同年龄的人员列表。
希望这个攻略对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8如何利用Lambda快速生成map、多层嵌套map - Python技术站