码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-05-14 12:55:27      阅读:411      评论:0      收藏:0      [点我收藏+]

标签:str   image   测试   getname   src   code   new   16px   imp   

 

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 流使用场景和常用操作

标签:str   image   测试   getname   src   code   new   16px   imp   

原文地址:https://www.cnblogs.com/theRhyme/p/10768367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!