📜  从列表容器中删除空值的Java程序

📅  最后修改于: 2022-05-13 01:55:23.075000             🧑  作者: Mango

从列表容器中删除空值的Java程序

List 是一个有序的对象集合,允许按插入顺序存储重复值或值。所以在很多场景中去除空值是非常重要的。

例子:

Input:  [Geeks, null, forGeeks, null, A computer portal]
Output: [Geeks, forGeeks, A computer portal]

Input:  [1, null, 2, 3, null, 4]
Output: [1, 2, 3, 4]

以下是从Java列表中删除空值的方法:

  1. 使用 List.remove() List 接口提供了一个预定义的方法remove(element) ,如果找到,该方法用于从 List 中删除单个出现的传递元素。

    算法

    1. 获取具有空值的列表。
    2. 对列表反复调用remove(null) ,直到所有空值都被删除。
    3. 返回/打印列表(现在删除了所有空值)。
    // Java Program to remove nulls
    // from a List using List.remove()
      
    import java.util.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Create the list with null values
            List list = new ArrayList<>(
                Arrays.asList("Geeks",
                              null,
                              "forGeeks",
                              null,
                              "A computer portal"));
      
            // Print the list
            System.out.println("Initial List: " + list);
      
            // Removing nulls using List.remove()
            // Repeatedly call remove() till all null are removed
            while (list.remove(null)) {
            }
      
            // Print the list
            System.out.println("Modified List: " + list);
        }
    }
    
    输出:
    Initial List: [Geeks, null, forGeeks, null, A computer portal]
    Modified List: [Geeks, forGeeks, A computer portal]
    
  2. 使用 List.removeAll() :List 接口提供了另一个预定义的方法removeAll(Collection) ,它用于从 List 中删除所有出现的 Collection 传递的元素,如果找到的话。

    算法

    1. 获取具有空值的列表。
    2. 使用Collections.singletonList(null)创建一个只有 null 作为元素的集合
    3. 对列表调用removeAll(Collection)一次。
    4. 返回/打印列表(现在删除了所有空值)。
    // Java Program to remove nulls
    // from a List using List.removeAll()
      
    import java.util.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Create the list with null values
            List list = new ArrayList<>(
                Arrays.asList("Geeks",
                              null,
                              "forGeeks",
                              null,
                              "A computer portal"));
      
            // Print the list
            System.out.println("Initial List: " + list);
      
            // Removing nulls using List.removeAll()
            // passing a collection with single element "null"
            list.removeAll(Collections.singletonList(null));
      
            // Print the list
            System.out.println("Modified List: " + list);
        }
    }
    
    输出:
    Initial List: [Geeks, null, forGeeks, null, A computer portal]
    Modified List: [Geeks, forGeeks, A computer portal]
    
  3. 使用迭代器:迭代器是一个属于集合框架的接口。它允许用户遍历集合,访问数据元素并删除集合的数据元素。

    算法

    1. 获取具有空值的列表。
    2. 从列表中创建一个迭代器
    3. 使用创建的迭代器遍历 List 的每个元素
    4. 检查每个元素是否为空。如果找到 null,请在该元素上调用IteratorElement.remove()
    5. 返回/打印列表(现在删除了所有空值)。

    程序:

    // Java Program to remove nulls
    // from a List using iterator
      
    import java.util.*;
      
    class GFG {
      
        // Generic function to remove Null Using Iterator
        public static  List removeNullUsingIterator(List list)
        {
      
            // Create an iterator from the list
            Iterator itr = list.iterator();
      
            // Find and remove all null
            while (itr.hasNext()) {
                if (itr.next() == null)
                    itr.remove(); // remove nulls
            }
      
            // Return the null
            return list;
        }
      
        public static void main(String[] args)
        {
      
            // Create the list with null values
            List list = new ArrayList<>(
                Arrays.asList("Geeks",
                              null,
                              "forGeeks",
                              null,
                              "A computer portal"));
      
            // Print the list
            System.out.println("Initial List: " + list);
      
            // Removing nulls using iterator
            list = removeNullUsingIterator(list);
      
            // Print the list
            System.out.println("Modified List:  " + list);
        }
    }
    
    输出:
    Initial List: [Geeks, null, forGeeks, null, A computer portal]
    Modified List:  [Geeks, forGeeks, A computer portal]
    
  4. 使用 Guava Iterables removeIf() :Guava Iterables 类提供Iterables.removeIf(Iterable, Predicate)从满足提供的谓词的指定 Iterable(或实现 Iterable 的集合)中删除每个元素。

    算法

    1. 获取具有空值的列表。
    2. 获取 Predicate 条件Predicates.isNull()传入 removeIf() 的参数
    3. 调用Iterables.removeIf(List, Predicate)其中 List 是具有空值的原始列表,而 Predicate 是 Predicates.isNull() 实例。
    4. 返回/打印列表(现在删除了所有空值)。
    // Java Program to remove nulls
    // from a List using Guava Iterables
      
    import com.google.common.base.Predicates;
    import com.google.common.collect.Iterables;
    import java.util.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Create the list with null values
            List list = new ArrayList<>(
                Arrays.asList("Geeks",
                              null,
                              "forGeeks",
                              null,
                              "A computer portal"));
      
            // Print the list
            System.out.println("Initial List: " + list);
      
            // Removing nulls using Guava Iterables
            // using Predicate condition isNull()
            Iterables.removeIf(list, Predicates.isNull());
      
            // Print the list
            System.out.println("Modified List: " + list);
        }
    }
    
    输出:
    Initial List: [Geeks, null, forGeeks, null, A computer portal]
    Modified List: [Geeks, forGeeks, A computer portal]
    
  5. 使用 Apache Commons Collections filter() :Apache Commons Collections CollectionUtils 类提供了filter(Iterable, Predicate) ,它从指定的可迭代对象中删除不满足提供的谓词的每个元素。

    算法

    1. 获取具有空值的列表。
    2. 获取 Predicate 条件PredicateUtils.notNullPredicate()以传入 filter() 的参数,以便通过NotNull条件的元素保留在列表中,而所有其他元素都被过滤。
    3. 调用CollectionUtils.filter(list, PredicateUtils.notNullPredicate())其中 List 是具有空值的原始列表, Predicate 是 PredicateUtils.notNullPredicate() 实例。
    4. 返回/打印列表(现在删除了所有空值)。

    程序:

    // Java Program to remove nulls
    // from a List using Apache Common COllection Filter()
    import org.apache.commons.collections4.CollectionUtils;
    import org.apache.commons.collections4.PredicateUtils;
    import java.util.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Create the list with null values
            List list = new ArrayList<>(
                Arrays.asList("Geeks",
                              null,
                              "forGeeks",
                              null,
                              "A computer portal"));
      
            // Print the list
            System.out.println("Initial List: " + list);
      
            // Removing nulls using Apache Common filter()
            // using Predicate condition notNullPredicate()
            CollectionUtils.filter(list, PredicateUtils.notNullPredicate());
      
            // Print the list
            System.out.println("Modified List: " + list);
        }
    }
    
    输出:
    Initial List: [Geeks, null, forGeeks, null, A computer portal]
    Modified List: [Geeks, forGeeks, A computer portal]
    
  6. 使用 Lambdas (Java 8)Stream.filter()方法可以在Java 8 中使用,它返回一个由元素组成的流
    匹配给定的谓词条件。

    算法

    1. 获取具有空值的列表。
    2. 使用list.stream()从列表中创建一个 Stream
    3. 使用list.filter(x -> x != null)过滤不为空的元素流
    4. 使用.collect(Collectors.toList()将 Stream 作为列表收集回来
    5. 返回/打印列表(现在删除了所有空值)。
    // Java Program to remove nulls
    // from a List using Apache Common COllection Filter()
      
    import java.util.stream.Collectors;
    import java.util.*;
      
    class GFG {
        public static void main(String[] args)
        {
      
            // Create the list with null values
            List list = new ArrayList<>(
                Arrays.asList("Geeks",
                              null,
                              "forGeeks",
                              null,
                              "A computer portal"));
      
            // Print the list
            System.out.println("Initial List: " + list);
      
            // Removing nulls using Java Stream
            // using Predicate condition in lambda expression
            list = list.stream()
                       .filter(x -> x != null)
                       .collect(Collectors.toList());
      
            // Print the list
            System.out.println("Modified List: " + list);
        }
    }
    
    输出:
    Initial List: [Geeks, null, forGeeks, null, A computer portal]
    Modified List: [Geeks, forGeeks, A computer portal]