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

}

相关文章
|
5天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
27 3
|
22天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
39 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
44 4
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
37 2
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
2月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
50 0
|
2月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
37 0
|
7月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1067 1
|
6月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
6月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。