Java 中流與迴圈的比較


是一個管道系統,主要用於在 Java 環境中聚合一些操作,例如 (filter()、map()、forEach() 和 collect())。此函式包含一個源,後跟零個值,然後終止操作。函式是輸入輸出流,主要取決於輸入引數。

每個流在以下情況下工作 -

  • 它從資料來源開始。

  • 透過管道處理資料元素。

  • 在終端操作中終止自身。

流與迴圈比較示例

這是一個示例 -

Benchmark Is Here Mode Cnt Score Error
Units
ForLoopPerformanceTest.usingForEachLoop thrpt 20 259.008 ± 17.888
ops/s
ForLoopPerformanceTest.usingIterator thrpt 20 256.016 ± 10.342
ops/s
ForLoopPerformanceTest.usingSimpleForLoop thrpt 20 495.308 ± 12.866
ops/s
ForLoopPerformanceTest.usingStream thrpt 20 257.174 ± 15.880
ops/s

流與迴圈比較演算法

在這個可能的演算法中,我們將向您展示如何執行兩個單獨流之間的比較過程以從中獲取值。

  • 步驟 1 - 開始流程。

  • 步驟 2 - 匯入並宣告 Java 包。

  • 步驟 3 - 宣告一個公共主類。

  • 步驟 4 - 宣告一個主驅動方法。

  • 步驟 5 - 宣告一個普通的整數流。

  • 步驟 6 - 新增一個新的行流。

  • 步驟 7 - 使用跳過值提及整數流。

  • 步驟 8 - 新增一個新的內聯值。

  • 步驟 9 - 根據需要新增更多字串。

  • 步驟 10 - 宣告一個字串。

  • 步驟 11 - 編寫輸出流。

  • 步驟 12 - 對陣列進行排序並列印它們。

  • 步驟 13 - 獲取返回值。

  • 步驟 14 - 終止流程。

流與迴圈比較語法

class Person {
	private String name;
	private int age;
	private String gender;
	private List<Person> siblings;
	public Person(String name, int age, String gender, List<Person> siblings) {
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.siblings = siblings;
	}
	public String getGender() {
		return gender;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public List<Person> getSiblings() {
		return siblings;
	}
}
private void streaming() {
	List<Person> persons = List.of();
	List<String> result = persons.stream()
	.filter(p -> p.getAge() > 18)
	.filter(p -> p.getAge() <= 65)
	.filter(p -> p.getName() != null)
	.filter(p -> p.getName().startsWith("B"))
	.map(p -> p.getName())
	.collect(Collectors.toList());
}

在上面這個可能的語法中,我們嘗試向您展示如何建立一個輸入流並將其與另一個 陣列列表 進行比較。透過使用上面提到的這些特定語法,我們正在朝著與問題陳述相關的一些可能方法邁進。

遵循的方法

  • 方法 1 - 使用 java.io.IOException 並從現有列表建立新列表來比較流與迴圈的 Java 程式

  • 方法 2 - 當比較流的操作導致異常時顯示程式碼執行的 Java 程式

方法 1:使用 Java.io.IOException 並從現有列表建立新列表來比較流與迴圈

Java.io.IOException 的使用和從現有列表建立列表

在這種可能的方法中,我們將使用 java.io.IOException,並且我們將進一步建立一個特定的陣列列表,以獲取排序元素的新陣列列表作為輸出。

private void forLoop(){
	List<Person> persons = List.of();
	List<String> result = new ArrayList<>();
	for(Person p : persons){
		if(p.getAge() > 18 && p.getAge() <= 65 && p.getName() != null &&
		p.getName().startsWith("B")){
			result.add(p.getName());
		}
	}
}

示例 1

//Java Program to Compare Streams to Loops By Using java.io.IOException
import java.io.IOException;
import java.lang.String;
import java.nio.file.*;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.*;
public class ARBRDDKOLDHAKA {
   public static void main(String[] args)
   throws IOException{
      System.out.println("Integer Stream Is Here: ");
      IntStream.range(1, 20).forEach(System.out::print);
      System.out.println();
      System.out.println("Integer Stream Values With The Value Skip :");
      IntStream.range(1, 20).skip(5).forEach(
      x -> System.out.println(x));
      System.out.println();
      System.out.println("Integer Stream With Sum We Can Get: ");
      System.out.println(IntStream.range(1, 5).sum());
      System.out.println();
      System.out.println(
      "Stream.of, sorted and Find The First : ");
      Stream.of("Rudra ", "Aboni ", "2022 ")
      .sorted()
      .findFirst()
      .ifPresent(System.out::println);
      System.out.println();
      String[] names = { "India", "Bangladesh",
      "Dhaka", "Kolkata",
      "Esplanade", "Howrah Bridge",
      "DU", "Indira Road",
      "Kolkata Dhaka Cantt." };
      System.out.println(
      "Stream from Array, sort, filter and print : ");
      Arrays
      .stream(names)
      .filter(x -> x.startsWith("S"))
      .sorted()
      .forEach(System.out::println);
      System.out.println();
      System.out.println(
      "Average of squares of an int array : ");
      Arrays.stream(new int[] { 2, 4, 6, 8, 10 })
      .map(x -> x * x)
      .average()
      .ifPresent(System.out::println);
      System.out.println();
      System.out.println(
      "Stream from List, filter and print : ");
      List<String> people = Arrays.asList(
         "AI", "Matlab", "Scikit", "TensorFlow",
         "OpenCV", "DeepLearning", "NLP",
         "NeuralNetworks");
      people.stream()
      .map(String::toLowerCase)
      .filter(x -> x.startsWith("a"))
      .forEach(System.out::println);
      System.out.println();
      System.out.println("Reduction - sum : ");
      double total
      = Stream.of(7.3, 1.5, 4.8)
      .reduce(0.0,
      (Double a, Double b) -> a + b);
      System.out.println("Total = " + total);
      System.out.println();
      System.out.println(
      "Reduction - summary statistics : ");
      IntSummaryStatistics summary
      = IntStream.of(7, 2, 19, 88, 73, 4, 10)
      .summaryStatistics();
      System.out.println(summary);
      System.out.println();
   }
}

輸出

Integer Stream Is Here:
12345678910111213141516171819
Integer Stream Values With The Value Skip :
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Integer Stream With Sum We Can Get:
10
Stream.of, sorted and Find The First :
2022
Stream from Array, sort, filter and print :
Average of squares of an int array :
44.0
Stream from List, filter and print :
ai
Reduction - sum :
Total = 13.600000000000001
Reduction - summary statistics :
IntSummaryStatistics{count=7, sum=203, min=2, average=29.000000, max=88}

在這種特定的 Java 方法中,我們將首先建立一個列表。透過使用該特定列表,我們將使用一些迴圈將流與之進行比較,以從之前宣告的資料集中獲取新的排序資料元素。

示例 2

//Java Program to Comparing Streams to Loops By Creating A New List From An Existing List
import java.util.*;
class ProgrammingLanguage {
   int rank;
   String name;
   int value;
   public ProgrammingLanguage(int rank, String name,
   int value){
      this.rank = rank;
      this.name = name;
      this.value = value;
   }
}
public class ARBRDD {
   public static void main(String[] args){
      List<ProgrammingLanguage> programmingLanguage
      = new ArrayList<ProgrammingLanguage>();
      programmingLanguage.add(
      new ProgrammingLanguage(1, "Java Programming",07102001 ));
      programmingLanguage.add(
      new ProgrammingLanguage(2, "Rust Programming", 16101997));
      programmingLanguage.add(
      new ProgrammingLanguage(3, "Ruby", 1500));
      programmingLanguage.add(
      new ProgrammingLanguage(4, "Scala", 2500));
      programmingLanguage.add(
      new ProgrammingLanguage(5, "Groovy", 4000));
      List<Integer> languageValueList
      = new ArrayList<Integer>();
      for (ProgrammingLanguage language :
      programmingLanguage) {
         if (language.value < 3000) {
            languageValueList.add(language.value);
         }
      }
      System.out.println(languageValueList);
   }
}

輸出

[1500, 2500]

方法 2:比較流導致異常時程式碼的執行

finally 塊的使用

在這種方法中,我們將解釋在開啟檔案(也稱為字串)並使用迴圈對其進行操作時,比較流可能發生的異常。這是一種修復流異常的方法,可幫助程式碼成功執行。

try {
	System.out.println("Open files");
	int a = 45;
	int b = 0;
	int div = a / b;
	System.out.println("STATEMENT" + div);
}

示例

//Java program to show the execution of the code when exception is caused by the operation of comparing steram
import java.io.*;
public class ARBRDD {
   public static void main(String[] args){
      try {
         System.out.println("Open files");
         int a = 45;
         int b = 0;
         int div = a / b;
         System.out.println("After dividing a and b ans is " + div);
      }
      catch (ArithmeticException ae) {
         System.out.println("exception caught");
         System.out.println(ae);
      }
      finally {
         System.out.println("Inside finally block after the stream comparison");
         System.out.println("Close files");
      }
   }
}

輸出

Open files
exception caught
java.lang.ArithmeticException: / by zero
Inside finally block after the stream comparison
Close files

結論

將流與迴圈進行比較是對陣列的輕量級操作,這有助於堆構建方面,並且我們可以掌握 CPU 使用情況。在今天的這篇文章中,我們嘗試使用上述提到的語法和演算法構建一些 Java 程式碼,以有效的方式解決問題陳述。

另請參閱: Java 面試問題及答案

更新於: 2024-06-18

304 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告