java---Collectors

103 阅读1分钟

参考 blog.csdn.net/qq_20919883…


package com.my.demo.Utils;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

@Slf4j
public class CollectorsTest {
    private List<Person> listData(){
        String str =  "[\n" +
                "  {\n" +
                "    "id": "00",\n" +
                "    "name": "王五",\n" +
                "    "age": 18,\n" +
                "    "jobCode": "0000",\n" +
                "    "jobName": "前端"\n" +
                "  },\n" +
                "  {\n" +
                "    "id": "01",\n" +
                "    "name": "李四",\n" +
                "    "age": 18,\n" +
                "    "jobCode": "0001",\n" +
                "    "jobName": "后端"\n" +
                "  },\n" +
                "  {\n" +
                "    "id": "02",\n" +
                "    "name": "赵三",\n" +
                "    "age": 18,\n" +
                "    "jobCode": "0000",\n" +
                "    "jobName": "前端"\n" +
                "  }\n" +
                "]";
        return JSON.parseArray(str, Person.class);
    }

    /**
     * Collectors.joining
     */
    @Test
    public void testJoining(){
        List<String> list = Arrays.asList("11","22","33");
        String listStr = list.stream().collect(Collectors.joining(",", "(", ")"));
        log.info("listStr:{}", listStr);
    }

    /**
     * Collectors.toMap
     * key若重复了会报错
     */
    @Test
    public void testToMap(){
        Map<String, Person> personMap = listData().stream().collect(Collectors.toMap(Person::getId, item -> item));
       log.info("personMap:{}",JSON.toJSONString(personMap));
    }

    /**
     * Collectors.toMap
     * 碰到key值相同的直接取前面的1项
     */
    @Test
    public void testToMapV1(){
        Map<String, Person> personMap = listData().stream().collect(Collectors.toMap(Person::getId, Function.identity(), (v1, v2) -> v1));
        log.info("personMap:{}",JSON.toJSONString(personMap));
    }

    /**
     * Collectors.groupingBy
     * 把key相同的项重组到一个list里面
     */
    @Test
    public void testGroupingBy(){
        Map<String, List<Person>> personListMap = listData().stream().collect(Collectors.groupingBy(item->item.getJobCode()));
        log.info("personListMap:{}",JSON.toJSONString(personListMap));
    }
}


/**
 * Collectors.counting
 * 计数
 */
@Test
public void testCounting(){
    Map<String, Long> jobCodeCount = listData().stream().collect(Collectors.groupingBy(Person::getJobCode, Collectors.counting()));
    log.info("personListMap:{}",JSON.toJSONString(jobCodeCount));
}