百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
3

30-seconds-of-java8

> 编程语言
开源

☕ 30 秒即可收集有用的 Java 8 代码片段。

2.4K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

☕ 30 秒即可收集有用的 Java 8 代码片段。

30 seconds of java8

你可以在30秒或更短时间内收集有用的Java8代码片段。

  • 使用 Ctrl + F 或者 command + F 来查找代码片段。
  • 代码片段基于 Java8,如果你还不熟悉可以在这里学习。
  • 代码片段翻译自 little-java-functions

目录

Array (数组相关)

详细信息
  • chunk
  • countOccurrences
  • deepFlatten
  • difference
  • differenceWith
  • distinctValuesOfArray
  • dropElements
  • dropRight
  • everyNth
  • filterNonUnique
  • flatten
  • flattenDepth
  • groupBy
  • head
  • initial
  • initializeArrayWithRange
  • initializeArrayWithValues
  • intersection
  • isSorted
  • join
  • nthElement
  • pick
  • reducedFilter
  • remove
  • sample
  • sampleSize
  • shuffle
  • similarity
  • sortedIndex
  • symmetricDifference
  • tail
  • take
  • takeRight
  • union
  • without
  • zip
  • zipObject

➗ Math (数学相关)

详细信息
  • average
  • gcd
  • lcm
  • findNextPositivePowerOfTwo
  • isEven
  • isPowerOfTwo
  • generateRandomInt

String (字符串相关)

详细信息
  • anagrams
  • byteSize
  • capitalize
  • capitalizeEveryWord
  • countVowels
  • escapeRegExp
  • fromCamelCase
  • isAbsoluteURL
  • isLowerCase
  • isUpperCase
  • isPalindrome
  • isNumeric
  • mask
  • reverseString
  • sortCharactersInString
  • splitLines
  • toCamelCase
  • toKebabCase
  • match
  • toSnakeCase
  • truncateString
  • words
  • stringToIntegers

⭕️ IO (IO流相关)

详细信息
  • convertInputStreamToString
  • readFileAsString
  • getCurrentWorkingDirectoryPath
  • tmpDirName

❌ Exception (异常相关)

详细信息
  • stackTraceAsString

System (系统相关)

详细信息
  • osName
  • isDebuggerEnabled

Class (类相关)

详细信息
  • getAllInterfaces
  • IsInnerClass

Enum (枚举相关)

详细信息
  • getEnumMap

Array

chunk

将数组分割成特定大小的小数组。

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);
}


⬆ 回到顶部

concat

public static <T> T[] concat(T[] first, T[] second) {
    return Stream.concat(
            Stream.of(first),
            Stream.of(second)
    ).toArray(i -> (T[]) Arrays.copyOf(new Object[0], i, first.getClass()));
}


⬆ 回到顶部

countOccurrences

计算数组中某个值出现的次数。

使用 Arrays.stream().filter().count() 计算等于指定值的值的总数。

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();
}


⬆ 回到顶部

distinctValuesOfArray

返回数组的所有不同值。

使用 Arrays.stream().distinct() 去除所有重复的值。

public static int[] distinctValuesOfArray(int[] elements) {
    return Arrays.stream(elements).distinct().toArray();
}


⬆ 回到顶部

dropElements

移除数组中的元素,直到传递的函数返回true为止。返回数组中的其余元素。

使用数组循环遍历数组,将数组的第一个元素删除,直到函数返回的值为真为止。返回其余的元素。

public static int[] dropElements(int[] elements, IntPredicate condition) {
    while (elements.length > 0 && !condition.test(elements[0])) {
        elements = Arrays.copyOfRange(elements, 1, elements.length);
    }
    return elements;
}


⬆ 回到顶部

dropRight

返回一个新数组,从右边移除n个元素。

检查n是否短于给定的数组,并使用 Array.copyOfRange() 以便对其进行相应的切片或返回一个空数组。

public static int[] dropRight(int[] elements, int n) {
    if (n < 0) {
        throw new IllegalArgumentException("n is less than 0");
    }
    return n < elements.length
            ? Arrays.copyOfRange(elements, 0, elements.length - n)
            : new int[0];
}


⬆ 回到顶部

everyNth

返回数组中的每个第n个元素。

使用 IntStream.range().filter() 创建一个新数组,该数组包含给定数组的每个第n个元素。

public static int[] everyNth(int[] elements, int nth) {
     return IntStream.range(0, elements.length)
             .filter(i -> i % nth == nth - 1)
             .map(i -> elements[i])
             .toArray();
 }


⬆ 回到顶部

indexOf

查找数组中元素的索引,在不存在元素的情况下返回-1。

使用 IntStream.range().filter() 查找数组中元素的索引。

public static int indexOf(int[] elements, int el) {
    return IntStream.range(0, elements.length)
            .filter(idx -> elements[idx] == el)
            .findFirst()
            .orElse(-1);
}


⬆ 回到顶部

lastIndexOf

查找数组中元素的最后索引,在不存在元素的情况下返回-1。

使用 IntStream.iterate().limit().filter() 查找数组中元素的索引。

public static int lastIndexOf(int[] elements, int el) {
    return IntStream.iterate(elements.length - 1, i -> i - 1)
            .limit(elements.length)
            .filter(idx -> elements[idx] == el)
            .findFirst()
            .orElse(-1);
}


⬆ 回到顶部

filterNonUnique

筛选出数组中的非唯一值。

对只包含唯一值的数组使用 Arrays.stream().filter()。

public static int[] filterNonUnique(int[] elements) {
    return Arrays.stream(elements)
            .filter(el -> indexOf(elements, el) != lastIndexOf(elements, el))
            .distinct()
            .toArray();
}


⬆ 回到顶部

flatten

使数组扁平。

使用 Arrays.stream().flatMapToInt().toArray() 创建一个新数组。

public static int[] flatten(Object[] elements) {
    return Arrays.stream(elements)
            .flatMapToInt(el -> el instanceof int[]
                    ? Arrays.stream((int[]) el)
                    : IntStream.of((int) el)
            ).toArray();
}


⬆ 回到顶部

flattenDepth

将数组压平到指定的深度。

public static Object[] flattenDepth(Object[] elements, int depth) {
    if (depth == 0) {
        return elements;
    }
    return Arrays.stream(elements)
            .flatMap(el -> el instanceof Object[]
                    ? Arrays.stream(flattenDepth((Object[]) el, depth - 1))
                    : Arrays.stream(new Object[]{el})
            ).toArray();

}


⬆ 回到顶部

groupBy

根据给定函数对数组元素进行分组。

使用 Arrays.stream().collect(Collectors.groupingBy()) 分组。

public static <T, R> Map<R, List<T>> groupBy(T[] elements, Function<T, R> func) {
    return Arrays.stream(elements).collect(Collectors.groupingBy(func));
}


⬆ 回到顶部

initial

返回数组中除去最后一个的所有元素。

使用 Arrays.copyOfRange() 返回除最后一个之外的所有元素。

public static <T> T[] initial(T[] elements) {
    return Arrays.copyOfRange(elements, 0, elements.length - 1);
}


⬆ 回到顶部

initializeArrayWithRange

初始化一个数组,该数组包含在指定范围内的数字,传入 start 和 end。

public static int[] initializeArrayWithRange(int end, int start) {
    return IntStream.rangeClosed(start, end).toArray();
}


⬆ 回到顶部

initializeArrayWithValues

使用指定的值初始化并填充数组。

public static int[] initializeArrayWithValues(int n, int value) {
    return IntStream.generate(() -> value).limit(n).toArray();
}


⬆ 回到顶部

intersection

返回两个数组中存在的元素列表。

从第二步创建一个集合,然后在 a 上使用 Arrays.stream().filter() 来保存包含在 b 中的值。

public static int[] intersection(int[] first, int[] second) {
    Set<Integer> set = Arrays.stream(second).boxed().collect(Collectors.toSet());
    return Arrays.stream(first)
            .filter(set::contains)
            .toArray();
}


⬆ 回到顶部

isSorted

如果数组按升序排序,则返回 1,如果数组按降序排序,返回 -1,如果没有排序,则返回 0。

计算前两个元素的排序 direction。使用for循环对数组进行迭代,并对它们进行成对比较。如果 direction 发生变化,则返回 0, 如果到达最后一个元素,则返回 direction。

public static <T extends Comparable<? super T>> int isSorted(T[] arr) {
    final int direction = arr[0].compareTo(arr[1]) < 0 ? 1 : -1;
    for (int i = 0; i < arr.length; i++) {
        T val = arr[i];
        if (i == arr.length - 1) return direction;
        else if ((val.compareTo(arr[i + 1]) * direction > 0)) return 0;
    }
    return direction;
}


⬆ 回到顶部

join

将数组的所有元素连接到字符串中,并返回此字符串。

使用 IntStream.range 创建一个指定索引的数组。然后,使用 Stream.reduce 将元素组合成字符串。

public static <T> String join(T[] arr, String separator, String end) {
    return IntStream.range(0, arr.length)
            .mapToObj(i -> new SimpleEntry<>(i, arr[i]))
            .reduce("", (acc, val) -> val.getKey() == arr.length - 2
                    ? acc + val.getValue() + end
                    : val.getKey() == arr.length - 1 ? acc + val.getValue() : acc + val.getValue() + separator, (fst, snd) -> fst);
}


⬆ 回到顶部

nthElement

返回数组的第n个元素。

Use Arrays.copyOfRange() 优先得到包含第n个元素的数组。

public static <T> T nthElement(T[] arr, int n) {
    if (n > 0) {
        return Arrays.copyOfRange(arr, n, arr.length)[0];
    }
    return Arrays.copyOfRange(arr, arr.length + n, arr.length)[0];
}


⬆ 回到顶部

pick

从对象中选择与给定键对应的键值对。

使用 Arrays.stream 过滤 arr 中存在的所有键。然后,使用 Collectors.toMap 将所有的key转换为Map。

public static <T, R> Map<T, R> pick(Map<T, R> obj, T[] arr) {
    return Arrays.stream(arr)
            .filter(obj::containsKey)
            .collect(Collectors.toMap(k -> k, obj::get));
}


⬆ 回到顶部

reducedFilter

根据条件筛选对象数组,同时筛选出未指定的键。

使用 Arrays.stream().filter() 根据谓词 fn 过滤数组,以便返回条件为真的对象。 对于每个过滤的Map对象,创建一个新的Map,其中包含 keys 中的键。最后,将Map对象收集到一个数组中。

public static Map<Strin

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Javacode-snippetsjava8java8-study

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言