1.使用group分组key值为空时触发异常,但是有时又需要对包含空数据的集合进行分组,空值数据分为一组。
/**
* 键值含有null的数据分组
*
* @param classifier 键值
* @param <T> 函数输入类型
* @param <A> 函数结果类型
* @return 组数据
*/
public static <T, A> Collector<T, ?, Map<A, List<T>>> groupByWithNullKeys(Function<? super T, ? extends A> classifier) {
return Collectors.toMap(
classifier,
Collections::singletonList,
(List<T> oldList, List<T> newEl) -> {
List<T> newList = new ArrayList<>(oldList.size() + 1);
newList.addAll(oldList);
newList.addAll(newEl);
return newList;
}
);
}
2.使用流处理数据循环遍历时,如果判断循环次数执行响应的逻辑,可以用下面方法替换forEach方法
/**
*集合遍历
*
* @param startIndex 起始索引
* @param elements 遍历的集合
* @param action BiConsumer类型的处理器
* @param <T> 泛型
*/
public static <T> void forEach(int startIndex,Iterable<? extends T> elements, BiConsumer<Integer, ? super T> action) {
Objects.requireNonNull(elements);
Objects.requireNonNull(action);
if(startIndex < 0) {
startIndex = 0;
}
int index = 0;
for (T element : elements) {
index++;
if(index <= startIndex) {
continue;
}
action.accept(index-1, element);
}
}