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

Posted therhyme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8 Stream 流使用场景和常用操作相关的知识,希望对你有一定的参考价值。

 

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

以上是关于Java8 Stream 流使用场景和常用操作的主要内容,如果未能解决你的问题,请参考以下文章

Java8 Stream流API常用操作

Java8 Stream流如何操作集合,一文带你了解!

Java8 Stream流如何操作集合,一文带你了解!

java8新特性

Java8使用Stream流实现List列表的查询统计排序分组

java8新特性Stream流操作详解及实战3