Array (数组相关)
public static int[][] chunk(int[] numbers, int size) {
return IntStream.iterate(0, i -> i + size)
.limit((long) Math.ceil((double) numbers.length / size))
.mapToObj(cur -> Arrays.copyOfRange(numbers, cur, cur + size > numbers.length ? numbers.length : cur + size))
.toArray(int[][]::new);
}
countOccurrences
计算数组中某个值出现的次数。
public static long countOccurrences(int[] numbers, int value) {
return Arrays.stream(numbers)
.filter(number -> number == value)
.count();
}
deepFlatten
数组扁平化。
使用递归实现,Arrays.stream().flatMapToInt()
public static int[] deepFlatten(Object[] input) {
return Arrays.stream(input)
.flatMapToInt(o -> {
if (o instanceof Object[]) {
return Arrays.stream(deepFlatten((Object[]) o));
}
return IntStream.of((Integer) o);
}).toArray();
}
difference
返回两个数组之间的差异。
从 b 中创建一个集合,然后在 a 上使用 Arrays.stream().filter()
只保留 b 中不包含的值。
public static int[] difference(int[] first, int[] second) {
Set<Integer> set = Arrays.stream(second).boxed().collect(Collectors.toSet());
return Arrays.stream(first)
.filter(v -> !set.contains(v))
.toArray();
}
differenceWith
从比较器函数不返回true的数组中筛选出所有值。
int的比较器是使用IntbinaryPerator函数来实现的。
使用 Arrays.stream().filter()
和 Arrays.stream().noneMatch()
查找相应的值。
public static int[] differenceWith(int[] first, int[] second, IntBinaryOperator comparator) {
return Arrays.stream(first)
.filter(a ->
Arrays.stream(second)
.noneMatch(b -> comparator.applyAsInt(a, b) == 0)
).toArray();
}