Java8 Stream 流使用场景和常用操作

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:50   2310   0

JAVA8内置的函数式编程接口应用场景和方式

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));
    }

来源:

https://juejin.im/post/5cc124a95188252d891d00f2

转载于:https://www.cnblogs.com/theRhyme/p/10768367.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP