Java Lambda表达式:根据属性值对List<Map>集合进行分组
可以使用Java 8的Lambda表达式和Stream API来遍历一个List<Map>集合,并根据其中的属性值进行分组。
假设List<Map>的元素是Map<String, String>类型,其中包含两个属性a和b。我们想要根据a属性值进行分组。
首先,我们可以使用Stream的collect()方法来将List转换为一个Map,其中键是a属性值,值是包含所有具有相同a属性值的Map的List。代码如下:
Map<String, List<Map<String, String>>> groupedMap = list.stream()
.collect(Collectors.groupingBy(m -> m.get("a")));
这将返回一个Map<String, List<Map<String, String>>>,其中键是a属性值,值是具有相同a属性值的Map的List。
完整示例代码如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Map<String, String>> list = new ArrayList<>();
Map<String, String> map1 = new HashMap<>();
map1.put("a", "group1");
map1.put("b", "value1");
list.add(map1);
Map<String, String> map2 = new HashMap<>();
map2.put("a", "group2");
map2.put("b", "value2");
list.add(map2);
Map<String, String> map3 = new HashMap<>();
map3.put("a", "group1");
map3.put("b", "value3");
list.add(map3);
Map<String, List<Map<String, String>>> groupedMap = list.stream()
.collect(Collectors.groupingBy(m -> m.get("a")));
// 遍历分组后的Map
groupedMap.forEach((key, value) -> {
System.out.println("Group: " + key);
value.forEach(System.out::println);
});
}
}
运行以上代码,输出为:
Group: group1
{a=group1, b=value1}
{a=group1, b=value3}
Group: group2
{a=group2, b=value2}
注意:以上示例假设List<Map>集合中的每个Map都包含"a"和"b"属性。如果属性名称不同或集合中的Map缺少某个属性,则需要相应地修改代码。
原文地址: https://www.cveoy.top/t/topic/p94v 著作权归作者所有。请勿转载和采集!