java 对list集合处理工具类

简介: 去重、流处理。。。

public class ListUtilDx {

/**
 * list 删除null
 *
 * @param list
 * @return
 */
public static List<String> removeNull(List<String> list) {
    if (null == list) {
        return null;
    }
    Iterables.removeIf(list, Objects::isNull);
    return list;
}

/**
 * 去重和去除 null
 *
 * @param list
 * @return
 */
public static List<String> distinctNull(List<String> list) {
    if (null == list) {
        return null;
    }
    return ImmutableSet.copyOf(Iterables.filter(list, Predicates.not(Predicates.isNull()))).asList();
}

/**
 * 去重和去除 null
 *
 * @param list
 * @return
 */
public static Optional<List<String>> distinctNullOptional(List<String> list) {
    if (null == list) {
        return Optional.empty();
    }
    return Optional.ofNullable(ImmutableSet.copyOf(Iterables.filter(list, Predicates.not(Predicates.isNull()))).asList());
}

/**
 * 拆分 逗号 数组,并去重
 *
 * @param str
 * @return
 */
public static Optional<List<String>> parse(String str) {
    return parse(str, ",");
}

/**
 * 拆分 逗号 数组,并去重
 *
 * @param str
 * @return
 */
public static Optional<List<String>> parse(String str, String separator) {
    List<String> strings = Splitter.on(separator).trimResults().omitEmptyStrings().splitToList(str);
    if (null == strings || strings.size() <= 0) {
        return Optional.empty();
    }
    return Optional.ofNullable(strings.stream().distinct().collect(Collectors.toList()));
}

/**
 * list 获取 ids 数组
 *
 * @param list
 * @param keyMapper
 * @param <K>
 * @param <T>
 * @return
 */
public static <K, T> Optional<List<K>> parse(List<T> list, Function<? super T, ? extends K> keyMapper) {
    return Optional.ofNullable(list.stream().map(keyMapper).collect(Collectors.toList()));
}

/**
 * list 获取 ids 数组 并去重
 *
 * @param list
 * @param keyMapper
 * @param <K>
 * @param <T>
 * @return
 */
public static <K, T> Optional<List<K>> parseByDistinct(List<T> list, Function<? super T, ? extends K> keyMapper) {
    return Optional.ofNullable(list.stream().map(keyMapper).distinct().collect(Collectors.toList()));
}

/**
 * list 转换为 map
 *
 * @param list
 * @param keyMapper
 * @param <K>
 * @param <T>
 * @return
 */
public static <K, T> Map<K, T> toMap(List<T> list, Function<? super T, ? extends K> keyMapper) {
    return list.stream().collect(Collectors.toMap(keyMapper, Function.identity(),
            (existing, replacement) -> existing));
}

/**
 * list 转换为 map
 *
 * @param list
 * @param keyMapper
 * @param keyMapper2
 * @param <K>
 * @param <K2>
 * @param <T>
 * @return
 */
public static <K, K2, T> Map<K, K2> toMap(List<T> list, Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends K2> keyMapper2) {
    return list.stream().collect(Collectors.toMap(keyMapper, keyMapper2, (key1, key2) -> key2));
}

/**
 * 解析后,用 , 号分割,拼接(连接)成 字符串,并跳过 null 值
 *
 * @param list
 * @return
 */
public static String toString(List<String> list) {
    return toString(list, ",");
}

/**
 * 解析后,用 指定 符号分割,拼接(连接)成 字符串,并跳过 null 值
 *
 * @param list
 * @return
 */
public static String toString(List<String> list, String separator) {
    return Joiner.on(separator).skipNulls().join(list);
}

}

相关文章
|
7天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
15 2
|
7天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
11天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
11天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
11天前
|
Java 开发者
|
11天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
12 0
|
16天前
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
23 0
|
3月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
3月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
24天前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
52 5