JAVA Collection

61 阅读1分钟

JAVA Collection

list 去重

 list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Bo::getId))), ArrayList::new));
/**
 * 按指定大小,分隔集合,将集合按规定个数分为n个部分
 *
 * @param list
 * @param len
 * @return
 */
public static <T> List<List<T>> splitList(List<T> list, int len) {
    if (list == null || list.size() == 0 || len < 1) {
        return null;
    }
    //返回结果
    List<List<T>> result = new ArrayList<List<T>>();
    //传入集合长度
    int size = list.size();
    //分隔后的集合个数
    int count = (size + len - 1) / len;
    for (int i = 0; i < count; i++) {
        List<T> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
        result.add(subList);
    }
    return result;
}

public static <E> List<E> getDuplicateElements(List<E> list) {
    // 获得元素出现频率的 Map,键为元素,值为元素出现的次数
    return list.stream().collect(Collectors.toMap(e -> e, e -> 1, (a, b) -> a + b)).entrySet().stream().filter(entry -> entry.getValue() > 1).map(entry -> entry.getKey()).collect(Collectors.toList());
}

左侧补0.


/**
 * 给数字对象按照指定长度在左侧补0.
 * <p>
 * 使用案例: addZero2Str(11,4) 返回 "0011", addZero2Str(-18,6)返回 "-000018"
 *
 * @param numObj 数字对象
 * @param length 指定的长度
 * @return
 */
public static String addZero2Str(Number numObj, int length) {
    NumberFormat nf = NumberFormat.getInstance();
    // 设置是否使用分组
    nf.setGroupingUsed(false);
    // 设置最大整数位数
    nf.setMaximumIntegerDigits(length);
    // 设置最小整数位数
    nf.setMinimumIntegerDigits(length);
    return nf.format(numObj);
}