pojo类对象和默认创建list的方法
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class DotaHero { private String name; private String kind; private String sex; /** * 返回一个不同元素的数组 * @return */ public static List<DotaHero> bulidDiffObjectList(){ List<DotaHero> list = new ArrayList<>(); list.add(new DotaHero("影魔", "敏捷", "男")); list.add(new DotaHero("小黑", "敏捷", "女")); list.add(new DotaHero("马尔斯", "力量", "男")); return list; } }
测试类初始化一个List:
public class StreamTest { private List<DotaHero> dotaHeroes; @Before public void init(){ dotaHeroes = DotaHero.bulidDiffObjectList(); }
将根据list转换为该list对象中的一个属性映射该对象,name属性唯一的情况
@Test public void list2MapValueObject(){ Map<String, DotaHero> nameMapDotaHero = dotaHeroes.stream().collect(Collectors.toMap(DotaHero::getName, d -> d)); nameMapDotaHero.forEach((k,v) -> System.out.format("key=%s, value=%s\n", k, v)); }
将根据list转换为该list对象中的一个属性映射该对象,kind属性不唯一的情况,Collectors.toMap 对于重复的key会抛出IllegalStateException异常
当key值不唯一时,通过Collectors.groupingBy将list转换成key映射list对象的格式:
/** * 将根据list转换为该list对象中的一个属性映射该对象 * kind属性不唯一的情况 */ @Test public void list2MapValueList(){ /* Collectors.toMap 对于重复的key会抛出IllegalStateException异常 Map<String, DotaHero> nameMapDotaHero = dotaHeroes.stream().collect(Collectors.toMap(DotaHero::getKind, d -> d)); nameMapDotaHero.forEach((k,v) -> System.out.format("key=%s, value=%s\n", k, v)); */ // 当key值不唯一时,通过Collectors.groupingBy将list转换成key映射list对象的格式 Map<String, List<DotaHero>> nameMapDotaHeroList = dotaHeroes.stream().collect(Collectors.groupingBy(DotaHero::getKind)); nameMapDotaHeroList.forEach((k,v) -> System.out.format("key=%s, value=%s\n", k, v)); }
来源: