📜  使用流和过滤器在数组中查找最大奇数的Java程序

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

使用流和过滤器在数组中查找最大奇数的Java程序

Java 8 引入了一些很棒的特性,如 Stream 和 Filter,它们极大地简化了读取数据和执行操作(如对它们的最小值、最大值、求和和条件检查)的任务。在这个程序中,我们将借助Java Stream 和 Filter 方法从整数列表中获取所有奇数中的最大值。

使用循环

在没有 Streams 的情况下,我们可以通过遍历列表并检查数字是否为奇数来实现给定的任务。如果为真,我们将检查它是否大于目前为止的最大奇数。

下面是该方法的实现:

Java
// Java implementation to find
// the maximum odd number in array
  
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
  
class GFG {
      
      // Function to find the maximum 
      // odd number in array
    public static int maxOdd(List list)
    {
        // Iterator for accessing the elements
        Iterator it = list.iterator();
  
        int max = 0;
        while (it.hasNext()) {
            int num = it.next();
  
            // Adding the elements 
              // greater than 5
            if (num % 2 == 1) {
                if (num > max) {
                    max = num;
                }
            }
        }
  
        return max;
    }
      
      // Driver Code
    public static void main(String[] args)
    {
        List list = new ArrayList();
  
        list.add(11);
        list.add(43);
        list.add(56);
        list.add(82);
        list.add(51);
        list.add(29);
        list.add(10);
  
        System.out.println("Largest odd number: "
                           + maxOdd(list));
    }
}


Java
// Java implementation to find 
// the maximum odd number
// in the array
  
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
  
class GFG {
      
      // Function to find the maximum odd
      // number in the list 
    public static int maxOdd(List list)
    {
        // Converted to Stream
          // Filtering the odd number
          // Taking maximum out of those integers
        return list.stream()
            .filter(n -> n % 2 == 1)
            .max(Integer::compare)
            .orElse(0);
    }
      
      // Driver Code
    public static void main(String[] args)
    {
        List list = new ArrayList();
  
        list.add(11);
        list.add(43);
        list.add(56);
        list.add(82);
        list.add(51);
        list.add(29);
        list.add(10);
  
        System.out.println("Largest odd number: "
                           + maxOdd(list));
    }
}


输出
Largest odd number: 51

使用流和过滤器

流过滤器返回一个流,该流由与给定谓词匹配的该流的元素组成。这是一个中间操作。这些操作总是惰性的,即执行诸如 filter() 之类的中间操作实际上并不执行任何过滤,而是创建一个新的流,当遍历时,该流包含与给定谓词匹配的初始流的元素。

下面是上述方法的实现:

Java

// Java implementation to find 
// the maximum odd number
// in the array
  
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
  
class GFG {
      
      // Function to find the maximum odd
      // number in the list 
    public static int maxOdd(List list)
    {
        // Converted to Stream
          // Filtering the odd number
          // Taking maximum out of those integers
        return list.stream()
            .filter(n -> n % 2 == 1)
            .max(Integer::compare)
            .orElse(0);
    }
      
      // Driver Code
    public static void main(String[] args)
    {
        List list = new ArrayList();
  
        list.add(11);
        list.add(43);
        list.add(56);
        list.add(82);
        list.add(51);
        list.add(29);
        list.add(10);
  
        System.out.println("Largest odd number: "
                           + maxOdd(list));
    }
}
输出
Largest odd number: 51

性能分析:

  • 时间复杂度: O(N)
  • 辅助空间: O(1)