随手笔记:1stream基本操作,2手动分页

 Map的遍历:

java8

    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        map.put("key4", "value4");
        map.put("key5", "value4");

        map.forEach((k, v) -> {
            System.out.println("map的forEach遍历" + "===" + k + "---" + v);
        });

        for (String key : map.keySet()) {
            System.out.println("map的keySet遍历key" + "===" + key + "---" + map.get(key));
        }

        Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, Object> entry = it.next();
            System.out.println("map迭代器遍历" + entry.getKey() + entry.getValue());
        }

        for (Map.Entry<String, Object> entry : map.entrySet()) {
            System.out.println("map迭代器遍历(大量数据)" + entry.getKey() + entry.getValue());
        }

        for (Object o : map.values()) {
            System.out.println("map遍历value值" + o.toString());
        }
    }

stream流操作list: list转map,以id为key,对象为value,(k1, k2) -> k1) 防止重复

Map<String, Entity> map = list.stream().collect(Collectors.toMap(Entity::getId, Function.identity(), (k1, k2) -> k1));

stream流操作list:list转map:以map中的两个字段做为map的 (key,value)

List<Map<String, Object>> list =new ArrayList<>();
Map<String, String> map= list .stream().collect(Collectors.toMap(a-> a.get("key").toString(), a-> a.get("value").toString()));

stream流操作list:list转map:以对象中的两个字段做为map的 (key,value)

Map<String, String> map = list.stream().collect(Collectors.toMap(Entity::getKey, Entity::getValue));

stream流对list去重:

List<Entity> afterList = list.stream().distinct().collect(Collectors.toList());

 stream流对list操作,将其中一个值做key,key对应的值做value集合,类似于MySql的groupBy,但是我公司的MySql不能groupBy,(有遇到类似问题解决过的大佬麻烦评论下):

Map<String, List<String>> map = list.stream().collect(Collectors.groupingBy(Entity::getId, Collectors.mapping(Entity::getName, Collectors.toList())));

对查询结果 list 进行手动分页:


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
@ApiModel("基础分页模型")
public class PageDTO<T> implements Serializable {

    @ApiModelProperty("每页数量")
    private Long pageSize;

    @ApiModelProperty("当前页码")
    private Long pageNumber;

    @ApiModelProperty("总记录数")
    private Long totalRecords;

    @ApiModelProperty("总页数")
    private Long totalPages;

    @ApiModelProperty("具体内容")
    private List<T> content;

    public PageDTO() {
    }

    public PageDTO(Long pageSize, Long pageNumber, Long totalRecords, Long totalPages) {
        this.pageSize = pageSize;
        this.pageNumber = pageNumber;
        this.totalRecords = totalRecords;
        this.totalPages = totalPages;
    }

    public PageDTO(Long pageSize, Long pageNumber, Long totalRecords, Long totalPages, List<T> content) {
        this.pageSize = pageSize;
        this.pageNumber = pageNumber;
        this.totalRecords = totalRecords;
        this.totalPages = totalPages;
        this.content = content;
    }
}

    public class LambdaUtil {

        /**
         * @param condition 执行条件
         * @param runE      condition 为true时执行get方法
         */
        public static void conditionHandler(Boolean condition, Run runE) {
            if (condition) {
                runE.run();
            }
        }
    }
@FunctionalInterface
public interface Run {

    void run();
}

    private List<Entity> pageBySubList(List<Entity> list, Integer pageSize, Integer pageNumber) {
        //总条数
        int totalcount = list.size();
        List<Entity> afterList = new ArrayList<>();
        int total = (pageNumber- 1) * pageSize;
        for (int i = total; i < (Math.min(total + pageSize, totalcount)); i++) {
            //然后将数据存入afterList中
            afterList.add(list.get(i));
        }
        //然后将处理后的数据集合进行返回
        return afterList;
    }

    private PageDTO<Entity> setPageDTO(List<Entity> entityList, Integer pageSize,Integer pageNumber) {
        PageDTO<Entity> pageDTO = new PageDTO<>();
        List<Entity> resultList = new ArrayList<>();
        long totalPages = Long.valueOf(entityList.size() % pageSize == 0 ? entityList.size() / pageSize : entityList.size() / pageSize + 1);
        int start = (pageNumber - 1 * pageSize;
        int end = pageNumber  * pageSize;
        LambdaUtil.conditionHandler(entityList.size() <= start, () -> resultList.addAll(new ArrayList<>()));
        LambdaUtil.conditionHandler(entityList.size() > start && entityList.size() <= end, () -> resultList.addAll(entityList.subList(start, entityList.size())));
        LambdaUtil.conditionHandler(entityList.size() > start && entityList.size() > end, () -> resultList.addAll(cjProductInfoList.subList(start, end)));
        pageDTO.setTotalRecords(Long.valueOf(entityList.size()));
        pageDTO.setPageSize(Long.valueOf(pageSize));
        pageDTO.setPageNumber(Long.valueOf(pageNumber));
        pageDTO.setTotalPages(totalPages);
        pageDTO.setContent(resultList);
        return pageDTO;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值