欢迎光临
感受代码之美

Java根据list下标拆分子list的四种方式

根据已有的list,想根据下标截取一个子list有下列几种方式:

java.jpg

package org.4spaces;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class SplitList {

    /**
     * 原生代码拆分
     *
     * @param originList 原始list
     * @param fromIndex  拆分开始下标(包含)
     * @param toIndex    拆分结束下标(不包含)
     * @return 被拆分之后的子list
     */
    public List naiveSplit(List originList, int fromIndex, int toIndex) {
        List subList = new ArrayList();
        if (fromIndex >= 0 && toIndex <= originList.size()) {
            for (int i = 0; i < originList.size(); i++) {
                if (i >= fromIndex && i < toIndex) {
                    subList.add(originList.get(i));
                }
            }
        }
        return subList;
    }

    /**
     * Java List.subList
     *
     * @param originList 原始list
     * @param fromIndex  拆分开始下标(包含)
     * @param toIndex    拆分结束下标(不包含)
     * @return 被拆分之后的子list
     */
    public List subListSplit(List originList, int fromIndex, int toIndex) {
        return originList.subList(fromIndex, toIndex);
    }

    /**
     * Java 8 Collectors.partitioningBy
     *
     * @param originList 原始list
     * @param fromIndex  拆分开始下标(包含)
     * @param toIndex    拆分结束下标(不包含)
     * @return
     */
    public List partitioningBySplit(List originList, int fromIndex, int toIndex) {
        Map<Boolean, List> subList = (Map<Boolean, List>) originList.stream().collect(Collectors.partitioningBy(s -> originList.indexOf(s) >= fromIndex && originList.indexOf(s) < toIndex));
        return subList.get(true);
    }

    /**
     * Java 8 Collectors.groupingBy
     *
     * @param originList 原始list
     * @param fromIndex  拆分开始下标(包含)
     * @param toIndex    拆分结束下标(不包含)
     * @return
     */
    public List groupingBySplit(List originList, int fromIndex, int toIndex) {
        Map<Boolean, List> subList = (Map<Boolean, List>) originList.stream().collect(Collectors.groupingBy(s -> originList.indexOf(s) >= fromIndex && originList.indexOf(s) < toIndex));
        return subList.get(true);
    }
}

参考文章:

  1. List.subList(int fromIndex,int toIndex)
  2. java.util.stream.Collectors
转载请注明来源:四个空格 » Java根据list下标拆分子list的四种方式

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址