Latest web development tutorials
×

Java หลักสูตร

Java หลักสูตร Java แนะนำโดยย่อ Java การกำหนดค่าการพัฒนาสภาพแวดล้อม Java พื้นฐานไวยากรณ์ Java วัตถุและการเรียน Java ชนิดข้อมูลพื้นฐาน Java ประเภทตัวแปร Java การปรับเปลี่ยน Java ผู้ประกอบการ Java โครงสร้างห่วง Java สาขาโครงสร้าง Java Number หมวดหมู่ Java Character หมวดหมู่ Java String หมวดหมู่ Java StringBuffer Java แถว Java วันที่เวลา Java นิพจน์ปกติ Java ทาง Java Stream,File,IO Java Scanner หมวดหมู่ Java การจัดการข้อยกเว้น

Java เชิงวัตถุ

Java สืบทอด Java Override/Overload Java polymorphism Java ระดับนามธรรม Java บรรจุภัณฑ์ Java อินเตอร์เฟซ Java บรรจุภัณฑ์

Java การสอนที่ทันสมัย

Java โครงสร้างข้อมูล Java คอลเลกชันกรอบ Java ยาชื่อสามัญ Java การทำให้เป็นอันดับ Java เขียนโปรแกรมเครือข่าย Java ส่ง Email Java การเขียนโปรแกรมแบบมัลติเธรด Java Appletรากฐาน Java เอกสารความคิดเห็น Java ตัวอย่าง Java 8 คุณสมบัติใหม่ Java MySQL สัมพันธ์

Java 8 สตรีม

Java 8 คุณสมบัติใหม่ Java 8 คุณสมบัติใหม่


Java API 8 เพิ่มเป็นนามธรรมใหม่ที่เรียกว่ากระแสกระแสช่วยให้คุณสามารถประมวลผลข้อมูลในทางที่เปิดเผย

กระแสใช้คำสั่ง SQL ที่คล้ายกันในการค้นหาข้อมูลจากฐานข้อมูลในทางที่ใช้งานง่ายเพื่อให้ระดับสูงขึ้นของนามธรรมและการแสดงออกของ Java ตั้งการดำเนินงาน

กระแส API อย่างมากสามารถให้ผลผลิตโปรแกรม Java ช่วยให้โปรแกรมเมอร์เขียนที่มีประสิทธิภาพสะอาดรหัสที่ง่าย

องค์ประกอบรูปแบบนี้จะถือว่าเป็นชนิดของคอลเลกชันของการไหลของกระแสในการส่งท่อและสามารถประมวลผลบนโหนดของท่อเช่นกรองการเรียงลำดับพอลิเมอ

องค์ประกอบของการไหลในท่อผ่านการดำเนินงานกลาง (การดำเนินการระดับสูง) การประมวลผลและในที่สุดก็จะได้รับผลของการประมวลผลก่อนหน้านี้โดยการดำเนินการขั้นสุดท้าย (การทำงานของเครื่อง) เดอะ

+--------------------+       +------+   +------+   +---+   +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+       +------+   +------+   +---+   +-------+

กระบวนการดังกล่าวข้างต้นเป็นรหัส Java:

List<Integer> transactionsIds = 
widgets.stream()
             .filter(b -> b.getColor() == RED)
             .sorted((x,y) -> x.getWeight() - y.getWeight())
             .mapToInt(Widget::getWeight)
             .sum();

สตรีมคืออะไร?

องค์ประกอบคิวสตรีม (สตรีม) คือการสนับสนุนจากแหล่งข้อมูลและการดำเนินงานที่รวม

  • องค์ประกอบเฉพาะประเภทของวัตถุรูปคิว ใน Java สตรีมไม่เก็บองค์ประกอบ แต่ความต้องการในการใช้คอมพิวเตอร์
  • แหล่งการไหลของข้อมูล สามารถตั้งค่าอาร์เรย์ I / O ช่อง, เครื่องกำเนิดไฟฟ้าและเครื่องกำเนิดไฟฟ้าอื่น ๆ
  • พอลิเมอคล้ายกับคำสั่งของการดำเนินงานดังกล่าวเป็นตัวกรอง, แผนที่, ลด, หา, การแข่งขันเรียง และอื่น ๆ

เก็บก่อนหน้าการดำเนินงานที่แตกต่างกันในการดำเนินงานสตรีมมีสองคุณสมบัติพื้นฐาน:

  • pipelining: การดำเนินการระดับกลางจะกลับวัตถุกระแสตัวเอง เพื่อให้การดำเนินงานหลายสามารถตัดแบ่งเป็นท่อเดี่ยวสไตล์เป็นกระแส (สไตล์คล่องแคล่ว) การดำเนินการนี้สามารถเพิ่มประสิทธิภาพเช่นความล่าช้าในการดำเนินการ (ขี้เกียจ) และการลัดวงจร (ลัดวงจร)
  • ย้ำภายใน: คอลเลกชันก่อนการเข้าไป Iterator หรือสำหรับแต่ละวิธีที่ชัดเจนย้ำคอลเลกชันภายนอกนี้เรียกว่าย้ำภายนอก กระแสให้เป็นวิธีที่ซ้ำภายในผ่านรูปแบบที่ผู้เข้าชม (Visitor) การดำเนินงาน

การสร้างกระแส

ใน Java 8, อินเตอร์เฟซชุดมีสองวิธีในการสร้างกระแส:

  • กระแส () - สร้างกระแสอนุกรมสำหรับคอลเลกชัน

  • parallelStream () - สร้างกระแสแบบขนานสำหรับคอลเลกชัน

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

forEach

กระแสให้วิธีการใหม่ของ 'forEach' ย้ำถึงกระแสข้อมูลแต่ละ ส่วนรหัสต่อไปนี้ใช้เอาท์พุท forEach 10 ตัวเลขสุ่ม:

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

แผนที่

วิธีการแผนที่สำหรับการทำแผนที่แต่ละองค์ประกอบที่สอดคล้องกับผลส่วนรหัสต่อไปนี้ใช้การส่งออกของแผนที่ที่สอดคล้องกับจำนวนของตารางธาตุ:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

กรอง

วิธีการกรองจะใช้ในการกำหนดเงื่อนไขโดยการกรององค์ประกอบ ส่วนรหัสต่อไปนี้ใช้วิธีการกรองกรองสตริงว่าง:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
int count = strings.stream().filter(string -> string.isEmpty()).count();

จำกัด

วิธีขีด จำกัด สำหรับการซื้อจำนวนที่ระบุลำธาร ส่วนรหัสต่อไปนี้ใช้วิธีขีด จำกัด ที่จะพิมพ์ออกข้อมูล 10:

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

เรียง

วิธีการสำหรับการพาความร้อนเพื่อเรียง ส่วนรหัสต่อไปนี้จะใช้วิธีการสุ่มเรียง 10 เรียงลำดับตัวเลขการส่งออก:

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

ขนาน (ขนาน) โปรแกรม

parallelStream เป็นกระแสขนานจัดการแทน เราใช้ตัวอย่างต่อไปนี้เพื่อส่งออกจำนวนสตริง parallelStream ว่าง:

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
int count = strings.parallelStream().filter(string -> string.isEmpty()).count();

เราสามารถสลับเพื่อที่จะทำงานในแบบขนานและโดยตรง


นักสะสม

ระดับสะสมดำเนินการจำนวนของการดำเนินงานลดลงตัวอย่างเช่นจะสตรีมลงไปในการเก็บรวบรวมและการรวมตัวขององค์ประกอบ นักสะสมสามารถใช้ในการกลับรายการหรือสตริง:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

System.out.println("筛选列表: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString);

สถิติ

นอกจากนี้ยังมีการผลิตสถิติสะสมยังมีประโยชน์มาก พวกเขาส่วนใหญ่จะใช้สำหรับการ int พื้นฐานประเภทคู่ยาวเป็นต้นซึ่งสามารถนำมาใช้เพื่อสร้างผลทางสถิติที่คล้ายกับต่อไป

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);

IntSummaryStatistics stats = integers.stream().mapToInt((x) -> x).summaryStatistics();

System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());

ตัวอย่างเต็มสตรีม

Java8Tester.java รหัสต่อไปนี้ลงในแฟ้ม:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.Map;

public class Java8Tester {
   public static void main(String args[]){
      System.out.println("使用 Java 7: ");
		
      // 计算空字符串
      List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
      System.out.println("列表: " +strings);
      long count = getCountEmptyStringUsingJava7(strings);
		
      System.out.println("空字符数量为: " + count);
      count = getCountLength3UsingJava7(strings);
		
      System.out.println("字符串长度为 3 的数量为: " + count);
		
      // 删除空字符串
      List<String> filtered = deleteEmptyStringsUsingJava7(strings);
      System.out.println("筛选后的列表: " + filtered);
		
      // 删除空字符串,并使用逗号把它们合并起来
      String mergedString = getMergedStringUsingJava7(strings,", ");
      System.out.println("合并字符串: " + mergedString);
      List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
		
      // 获取列表元素平方数
      List<Integer> squaresList = getSquares(numbers);
      System.out.println("平方数列表: " + squaresList);
      List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);
		
      System.out.println("列表: " +integers);
      System.out.println("列表中最大的数 : " + getMax(integers));
      System.out.println("列表中最小的数 : " + getMin(integers));
      System.out.println("所有数之和 : " + getSum(integers));
      System.out.println("平均数 : " + getAverage(integers));
      System.out.println("随机数: ");
		
      // 输出10个随机数
      Random random = new Random();
		
      for(int i=0; i < 10; i++){
         System.out.println(random.nextInt());
      }
		
      System.out.println("使用 Java 8: ");
      System.out.println("列表: " +strings);
		
      count = strings.stream().filter(string->string.isEmpty()).count();
      System.out.println("空字符串数量为: " + count);
		
      count = strings.stream().filter(string -> string.length() == 3).count();
      System.out.println("字符串长度为 3 的数量为: " + count);
		
      filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList());
      System.out.println("筛选后的列表: " + filtered);
		
      mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));
      System.out.println("合并字符串: " + mergedString);
		
      squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList());
      System.out.println("Squares List: " + squaresList);
      System.out.println("列表: " +integers);
		
      IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics();
		
      System.out.println("列表中最大的数 : " + stats.getMax());
      System.out.println("列表中最小的数 : " + stats.getMin());
      System.out.println("所有数之和 : " + stats.getSum());
      System.out.println("平均数 : " + stats.getAverage());
      System.out.println("随机数: ");
		
      random.ints().limit(10).sorted().forEach(System.out::println);
		
      // 并行处理
      count = strings.parallelStream().filter(string -> string.isEmpty()).count();
      System.out.println("空字符串的数量为: " + count);
   }
	
   private static int getCountEmptyStringUsingJava7(List<String> strings){
      int count = 0;
		
      for(String string: strings){
		
         if(string.isEmpty()){
            count++;
         }
      }
      return count;
   }
	
   private static int getCountLength3UsingJava7(List<String> strings){
      int count = 0;
		
      for(String string: strings){
		
         if(string.length() == 3){
            count++;
         }
      }
      return count;
   }
	
   private static List<String> deleteEmptyStringsUsingJava7(List<String> strings){
      List<String> filteredList = new ArrayList<String>();
		
      for(String string: strings){
		
         if(!string.isEmpty()){
             filteredList.add(string);
         }
      }
      return filteredList;
   }
	
   private static String getMergedStringUsingJava7(List<String> strings, String separator){
      StringBuilder stringBuilder = new StringBuilder();
		
      for(String string: strings){
		
         if(!string.isEmpty()){
            stringBuilder.append(string);
            stringBuilder.append(separator);
         }
      }
      String mergedString = stringBuilder.toString();
      return mergedString.substring(0, mergedString.length()-2);
   }
	
   private static List<Integer> getSquares(List<Integer> numbers){
      List<Integer> squaresList = new ArrayList<Integer>();
		
      for(Integer number: numbers){
         Integer square = new Integer(number.intValue() * number.intValue());
			
         if(!squaresList.contains(square)){
            squaresList.add(square);
         }
      }
      return squaresList;
   }
	
   private static int getMax(List<Integer> numbers){
      int max = numbers.get(0);
		
      for(int i=1;i < numbers.size();i++){
		
         Integer number = numbers.get(i);
			
         if(number.intValue() > max){
            max = number.intValue();
         }
      }
      return max;
   }
	
   private static int getMin(List<Integer> numbers){
      int min = numbers.get(0);
		
      for(int i=1;i < numbers.size();i++){
         Integer number = numbers.get(i);
		
         if(number.intValue() < min){
            min = number.intValue();
         }
      }
      return min;
   }
	
   private static int getSum(List numbers){
      int sum = (int)(numbers.get(0));
		
      for(int i=1;i < numbers.size();i++){
         sum += (int)numbers.get(i);
      }
      return sum;
   }
	
   private static int getAverage(List<Integer> numbers){
      return getSum(numbers) / numbers.size();
   }
}

การดำเนินงานของสคริปดังกล่าวข้างต้นออกเป็น:

$ javac Java8Tester.java 
$ java Java8Tester
使用 Java 7: 
列表: [abc, , bc, efg, abcd, , jkl]
空字符数量为: 2
字符串长度为 3 的数量为: 3
筛选后的列表: [abc, bc, efg, abcd, jkl]
合并字符串: abc, bc, efg, abcd, jkl
平方数列表: [9, 4, 49, 25]
列表: [1, 2, 13, 4, 15, 6, 17, 8, 19]
列表中最大的数 : 19
列表中最小的数 : 1
所有数之和 : 85
平均数 : 9
随机数: 
-393170844
-963842252
447036679
-1043163142
-881079698
221586850
-1101570113
576190039
-1045184578
1647841045
使用 Java 8: 
列表: [abc, , bc, efg, abcd, , jkl]
空字符串数量为: 2
字符串长度为 3 的数量为: 3
筛选后的列表: [abc, bc, efg, abcd, jkl]
合并字符串: abc, bc, efg, abcd, jkl
Squares List: [9, 4, 49, 25]
列表: [1, 2, 13, 4, 15, 6, 17, 8, 19]
列表中最大的数 : 19
列表中最小的数 : 1
所有数之和 : 85
平均数 : 9.444444444444445
随机数: 
-1743813696
-1301974944
-1299484995
-779981186
136544902
555792023
1243315896
1264920849
1472077135
1706423674
空字符串的数量为: 2

Java 8 คุณสมบัติใหม่ Java 8 คุณสมบัติใหม่