ืืืื ื-Java Threads ื-Java 8
Java Streams, ืฉืืืฆืื ืืืืง ื-Java 8, ืืฉืืฉืื ืืขืืืื ืขื ืืืกืคื ื ืชืื ืื. ืื ืืื ื ืืื ื ื ืชืื ืื ืืขืฆืื, ืื ื ืืชื ืืืฉืชืืฉ ืืื ืืื ืืืืื ืืืืข ืืืื ื ื ืชืื ืื ืืืจืื ืขื ืืื ืืืื ื ืืฆืื ืืจ ืืื ืืืคืืง ืชืืฆืื ืกืืคืืช. ืืขืจื: ืืฉืื ืื ืืืืื ืืื Stream ื-Thread, ืืืืืื ืฉืืจืืกืืช ืืชืืืืกืื ืืจืื ืืฉื ื ืืืื ืืื ืืืืชื ืชืจืืื "ืืจืืื". Stream ืืฆืืื ืืืืืืงื ืืืืฆืืข ืคืขืืืืช (ืืจืื ืืขืืจื ืื ืืืกืื ื ืชืื ืื), ืืขืื Thread (ืชืจืืื ืืืืืื - thread) ืืฆืืื ืืืืืืงื ืืืืคืฉืจ ืืืฆืืข ืฉื ืงืื ืชืืื ืืช ืืกืืื ืืืงืืื ืืขื ืคื ืงืื ืืืจืื. ืืืืืื ืฉ-stream ืืื ื ืืื ื ื ืชืื ืื ื ืคืจื, ืืื ืืขืืื ืื ืืฉื ื ืืช ืืงืืจ ืื ืชืื ืื. ืืืจืื Java ืืฉ ืืช ืืชืืื ืืช ืืืืืช:-
ื ืืชื ืืืฉืชืืฉ ื-Java Stream ืืืืฆืขืืช ืืืืืช "java.util.stream". ื ืืชื ืืืืื ืืืชื ืืกืงืจืืคื ืืืืฆืขืืช ืืงืื:
import java.util.stream.* ;
ืืืืฆืขืืช ืงืื ืื, ื ืืื ืื ืืืืฉื ืืงืืืช ืืกืคืจ ืคืื ืงืฆืืืช ืืืื ืืช ื-Java Stream.
-
Java Stream ืืืื ืืงืื ืงืื ืืืืกืคื ื ืชืื ืื ืืืื ืืืกืคืื ืืืขืจืืื ื-Java.
-
Java Stream ืืื ื ืืืจืฉ ืฉืื ืื ืืื ื ื ืชืื ื ืืงืื.
-
Java Stream ืื ืืฉื ื ืืช ืืืงืืจ. ืืืงืื ืืืช, ืืื ืืืืฆืจ ืคืื ืืืืฆืขืืช ืฉืืืืช ืฆืื ืืจ ืืชืืืืืช.
-
ืืจืื Java ืืคืืคืื ืืคืขืืืืช ืืื ืืื ืืืกืืฃ, ืขืืืื ื ืืื ืืกืขืืคืื ืืืืื.
-
ื-Java Stream, ืคืขืืืืช ืืื ืืื ืืชืืฆืขืืช ืืฆื ืจืช ืืืชืจืืฉืืช ืืคืืจืื ืืขืจืื ืขืฆืื. ืื ืืกืชืืืืื ืืคืื ืงืฆืืืช ืืกืืฃ. ืื ืืืืื ืืช ืืคืืจืื ืืืกืืกื ืืฉืืืืฉ ื-Java Stream.
ืืฆืืจืช ืืจื Java ื-Java 8
ื ืืชื ืืืฆืืจ ืฉืจืฉืืจื Java ืืืื ืืจืืื:1. ืืฆืืจืช ืืจื ืจืืง ืืฉืืืช Stream.empty()
ืืชื ืืืื ืืืฆืืจ ืืจื ืจืืง ืืฉืืืืฉ ืืืืืจ ืืืชืจ ืืงืื ืฉืื. ืื ืืชื ืืฉืชืืฉ ืืฉืืืช Stream.empty() , ืืืืืฆืจ ืืจื ืจืืง, ืฉืืื ื ืืืื ืขืจืืื. ืืืจื ืืจืืง ืืื ืืืื ืืืืืช ืฉืืืืฉื ืื ืืจืฆืื ื ื ืืืื ืขื ืืจืื ืืฆืืืข null ืืืื ืจืืฆื. ืืื ืืขืฉืืช ืืืช ืืชื ืืืื ืืืฉืชืืฉ ืืคืงืืื ืืืื:Stream<String> str = Stream.empty();
ืืืฆืืจื ืฉืืขืื ืชืืฆืืจ ืืจื ืจืืง ืืฉื str ืืื ืืืื ืืื ืืืฉืื ืืชืืื. ืืื ืืืืช ืืืช, ืคืฉืื ืืืืง ืืช ืืกืคืจ ืื ืืืื ืืืจื ืืืืฆืขืืช ืืืื ื str.count() . ืืืืืื,
System.out.println(str.count());
ืืชืืฆืื ืืื, ื ืงืื 0 ืืคืื .
2. ืฆืืจ ืืจื ืืืืฆืขืืช ืฉืืืช Stream.builder() ืขื ืืืคืข Stream.Builder
ืื ื ืืืืืื ืื ืืืฉืชืืฉ ื-Stream Builder ืืื ืืืฆืืจ ืืจื ืืืืฆืขืืช ืชืื ืืช ืืขืืฆืื ืฉื ื-Builder. ืืื ืืืืขื ืืื ืืื ืฉืื ืืืจ ืฉืื ืฉื ืืคืฆืื. ืืืื ื ืจืื ืืืฆื ื ืืื ืืืฆืืจ ืืืคืข ืฉื ืืจื ืืืืฆืขืืช ืืื ื ืืจืืื .Stream.Builder<Integer> numBuilder = Stream.builder();
numBuilder.add(1).add(2).add( 3);
Stream<Integer> numStream = numBuilder.build();
ืืืืฆืขืืช ืงืื ืื, ืืชื ืืืื ืืืฆืืจ ืืจื ืืฉื numStream ืืืืื ืจืืืื int . ืืื ื ืขืฉื ืื ืืืจ ืืืืืช ืืืืคืข Stream.Builder ืฉื ืงืจื numBuilder ืฉื ืืฆืจ ืจืืฉืื.
3. ืฆืืจ ืืจื ืขื ืืขืจืืื ืฉืฆืืื ื ืืฉืืืช Stream.of()
ืืจื ื ืืกืคืช ืืืฆืืจ ืืจื ืืืืืช ืฉืืืืฉ ืืฉืืืช Stream.of() . ืืืื ืืจื ืคืฉืืื ืืืฆืืจ ืืจื ืขื ืขืจืืื ื ืชืื ืื. ืืื ืืฆืืืจ ืืื ืืืชืื ืืช ืืฉืจืฉืืจ. ืืืืื ืืฉืืืืฉ ืืฉืืืช Stream.of() ืืืฆืืจืช ืืจื:Stream<Integer> numStream = Stream.of(1, 2, 3);
ืงืื ืื ืืฆืืจ ืืจื ืืืืื ืจืืืื int , ืืืืืง ืืื ืฉืขืฉืื ื ืืฉืืื ืืงืืืืช ืืืืฆืขืืช Stream.Builder . ืืื ืืฆืจื ื ืืจื ืืฉืืจืืช ืืืืฆืขืืช Stream.of() ืขื ืขืจืืื ืืืืืจืื ืืจืืฉ [1, 2 ื-3] .
4. ืฆืืจ ืืจื ืืืขืจื ืงืืื ืืฉืืืช Arrays.stream()
ืฉืืื ื ืคืืฆื ื ืืกืคืช ืืืฆืืจืช ืฉืจืฉืืจ ืืืืืช ืฉืืืืฉ ืืืขืจืืื ื-Java. ืืืจื ืืื ื ืืฆืจ ืืืขืจื ืงืืื ืืฉืืืช Arrays.stream() . ืื ืจืืืื ืืืขืจื ืืืืจืื ืืจืืืื ืืจื. ืื ื ืืืืื ืืืื:Integer[] arr = {1, 2, 3, 4, 5};
Stream<Integer> numStream = Arrays.stream(arr);
ืงืื ืื ืืคืืง numStream ืืืืื ืืช ืืชืืื ืฉื ืืขืจื ืฉื ืงืจื arr, ืฉืืื ืืขืจื ืฉืืืื.
5. ืืืืื ืฉื ื ืืจืืื ืงืืืืื ืืฉืืืช Stream.concat()
ืฉืืื ื ืืกืคืช ืฉื ืืชื ืืืฉืชืืฉ ืื ืืืฆืืจืช ืืจื ืืื ืืฉืืื Stream.concat() . ืืื ืืฉืืฉ ืืฉืืืื ืฉื ื ืืืืื ืืืฆืืจืช ืืื ืืืื. ืฉื ื ืืืจืืื ืืฉืืืืื ืืคื ืืกืืจ. ืื ืืืืจ ืฉืืืื ืืจืืฉืื ืืืืข ืจืืฉืื, ืืืืจืื ืืืื ืืฉื ื, ืืื ืืืื. ืืืืื ืืฉืจืฉืืจ ืืื ื ืจืืืช ืื:Stream<Integer> numStream1 = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> numStream2 = Stream.of(1, 2, 3);
Stream<Integer> combinedStream = Stream.concat( numStream1, numStream2);
ืืืฆืืจื ืืขืื ืชืืฆืืจ ืืจื ืกืืคื ืืฉื combinedStream ืืืืื ืืืื ืืื ืฉื ืืืจื ืืจืืฉืื numStream1 ืืืืจื ืืฉื ื numStream2 ืืื ืืืจ ืื .
ืกืืื ืคืขืืืืช ืขื Java Stream
ืืคื ืฉืืืจ ืฆืืื ื, ื ืืชื ืืืฆืข ืฉื ื ืกืืื ืคืขืืืืช ืขื Java Stream ื-Java 8: ืืื ืื ื ืืืกืืฃ. ืืืื ื ืกืชืื ืขื ืื ืืื ืืื ืืืชืจ ืคืืจืื.ืคืขืืืืช ืืื ืืื
ืคืขืืืืช ืืื ืืื ืืืืฆืจืืช ืืจื ืคืื ืืืืืฆืขืืช ืจืง ืืืฉืจ ื ืชืงืืื ืืคืขืืืช ืืจืืื ื. ืืืฉืืขืืช ืืื ืฉืคืขืืืืช ืืื ืืื ืืืืฆืขืืช ืืขืฆืืชืืื, ืืฆื ืจืช, ืื ืืชื ืืืฉืืื ืืืชื ืจืง ืขื ืืื ืคืขืืืช ืืจืืื ื. ืขื ืืขืจืื ืขืฆืื ืืช ืืฆื ืจืช ืชืืืื ืงืฆืช ืืืืืจ ืืืชืจ. ืืืืืืืช ืืคืขืืืืช ืืื ืืื ืื ืืฉืืืืช ืืืืืช: filter() , map() , different() , peek() , sorted() ืืขืื ืืื.ืชืคืขืื ืืกืืฃ
ืคืขืืืืช ืืจืืื ื ืืฉืืืืืช ืืช ืืืฆืืข ืคืขืืืืช ืืื ืืื ืืื ืืืืืจืืช ืืช ืืชืืฆืืืช ืืกืืคืืืช ืฉื ืืจื ืืคืื. ืืืืืื ืฉืคืขืืืืช ืืจืืื ื ืืืืชืชืืช ืขื ืกืืื ืืืืฆืืข ืืขืฆื ืืืฆื ืจืช, ืื ื ืืชื ืืืฉืชืืฉ ืืืื ืื ืฉืื ืืืืจ ืฉืืื ืขืืจ ืคืขืืืช ืืจืืื ื. ืืืืืืืช ืืคืขืืืืช ืืกืืฃ ืื ืืฉืืืืช ืืืืืช: forEach() , collect() , count() , reduce() ืืื ืืืื.ืืืืืืืช ืืคืขืืืืช ืขื Java Stream
ืคืขืืืืช ืืื ืืื
ืื ื ืืื ืืืืืืืช ืืืื ืคืขืืืืช ืืื ืืื ืฉื ืืชื ืืืืื ืขื ืืจื Java:ืึฐืกึทื ึตื()
ืฉืืื ืื ืืฉืืฉืช ืืกืื ืื ืืืื ืืื ืืืจื ืืชืืืืื ืืคืจืืืงื ืกืคืฆืืคื ื-Java. ืืคืจืืืื ืืืกืื ื ื ืื ืืืื ืืจืืืืื ืืจื ืืืฉ. ืืืื ื ืกืชืื ืขื ืืืืื ืืื ืืืืื ืืื ืืืชืจ.Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); List<Integer> even = numStream.filter(n -> n % 2 == 0) .collect(Collectors.toList()); System.out.println(even);
ืกืืืื:
ืึทืคึผึธื()
ืฉืืื ืื ืืฉืืฉืช ืืืฆืืจืช ืืจื ืืืฉ ืขื ืืื ืืืฆืืข ืคืื ืงืฆืืืช ืืืืคื ืขื ืืืื ืืื ืฉื ืืจื ืืงืื ืืืงืืจื. ืืืื ืืืจื ืืืืฉ ืืฉ ืกืื ื ืชืื ืื ืืืจ. ืืืืืื ื ืจืืืช ืื:Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); List<Integer> d = numStream.map(n -> n*2) .collect(Collectors.toList()); System.out.println(d);
ืกืืืื:
ืืึผืืึธืง()
ืฉืืื ืื ืืฉืืฉืช ืืืืืืจ ืจืง ืืืื ืืื ืืืืืื ืืืจื ืขื ืืื ืกืื ืื ืืคืืืืืืช. ืืืืื ืืืืชื ืืืจ ื ืจืืืช ืื:Stream<Integer> numStream = Stream.of(43,65,1,98,63,63,1); List<Integer> numList = numStream.distinct() .collect(Collectors.toList()); System.out.println(numList);
ืกืืืื:
ืึฐืึธืฆึดืืฅ()
ืฉืืื ืื ืืฉืืฉืช ืืืขืงื ืืืจ ืฉืื ืืืื ืืื ืืื ืืคื ื ืืืฆืืข ืคืขืืืช ืืจืืื ื. ืืฉืืขืืช ืืืืจ ืืื ืฉื ืืชื ืืืฉืชืืฉ ื-peek() ืืื ืืืฆืข ืคืขืืื ืืื ืืืื ื ืฉื ืืจื ืืื ืืืฆืืจ ืืจื ืฉืขืืื ื ืืชื ืืืฆืข ืคืขืืืืช ืืื ืืื ื ืืกืคืืช.Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); List<Integer> nList = numStream.map(n -> n*10) .peek(n->System.out.println("Mapped: "+ n)) .collect(Collectors.toList()); System.out.println(nList);
ืกืืืื:
ืึฐืืึผืึธื()
ืืฉืืื sorted() ืืฉืืฉืช ืืืืื ืืืืื ืืื ืฉื ืืจื. ืืืจืืจืช ืืืื, ืืื ืืืืื ืืืื ืืื ืืกืืจ ืขืืื. ื ืืชื ืื ืืฆืืื ืกืืจ ืืืื ืืกืืื ืืคืจืืืจ. ืืืฉืื ืืืืืื ืฉื ืฉืืื ืื ื ืจืื ืื:Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); numStream.sorted().forEach(n -> System.out.println(n));
ืกืืืื:
ืชืคืขืื ืืกืืฃ
ืื ื ืืื ืืืืืืืช ืืืื ืคืขืืืืช ืืกืืฃ ืฉื ืืชื ืืืืื ืขื ืืจืื Java:ืืื ืืื()
ืืฉืืื forEach() ืืฉืืฉืช ืืื ืืืืืจ ืขื ืื ืืืืื ืืื ืฉื ืืจื ืืืืฆืข ืืช ืืคืื ืงืฆืื ืืื ืืืื ื ืืื ืืื. ืื ืคืืขื ืืืืืคื ืืืฆืืจืืช ืืืืื ืืืื for , while ืืืืจืืช. ืืืืื:Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); numStream.forEach(n -> System.out.println(n));
ืกืืืื:
ืืกืคืืจ()
ืฉืืืช count() ืืฉืืฉืช ืืื ืืืืืจ ืืช ืืืกืคืจ ืืืืื ืฉื ืืืื ืืื ืืงืืืืื ืืืจื. ืื ืืืื ืืฉืืืช size() , ืืืฉืืฉืช ืืขืชืื ืงืจืืืืช ืืื ืืงืืืข ืืช ืืืกืคืจ ืืืืื ืฉื ืืืื ืืื ืืืืกืฃ. ืืืืื ืืฉืืืืฉ ืืฉืืืช count() ืขื ืืจื Java ืืื ืืืืงืื:Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); System.out.println(numStream.count());
ืกืืืื:
ืืืกืืฃ()
ืฉืืืช collect() ืืฉืืฉืช ืืืืฆืืข ืืคืืชืืช ืื ืืชื ืืช ืืฉืื ืื ืฉื ืจืืืื ืืจื. ื ืืชื ืืืฉืชืืฉ ืื ืืื ืืืกืืจ ืชืืื ืืืจื ืืืืจ ืืฉืืืช ืืขืืืื. ืืื ืืฉืชืืฉ ืืืืืงื Collector ืืื ืืืฆืข ืืคืืชืืช .Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); List<Integer> odd = numStream.filter(n -> n % 2 == 1) .collect(Collectors.toList()); System.out.println(odd);
ืกืืืื:
min() ืืืงืก ()
ื ืืชื ืืืฉืชืืฉ ืืฉืืืช min() , ืืคื ืฉืืฉื ืืจืื, ืืืจื ืืื ืืืฆืื ืืช ืืืืื ื ืืืื ืืืื ืื. ืืืืคื ืืืื, ื ืืชื ืืืฉืชืืฉ ืืฉืืืช max() ืืื ืืืฆืื ืืช ืืืืื ื ืืืงืกืืืื ืืืจื. ืืืื ื ื ืกื ืืืืื ืืืฆื ื ืืชื ืืืฉืชืืฉ ืืื ืืืืฆืขืืช ืืืืื:Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); int smallest = numStream.min((m, n) -> Integer.compare(m, n)).get(); System.out.println("Smallest element: " + smallest);
numStream = Stream.of(43, 65, 1, 98, 63); int largest = numStream.max((m, n) -> Integer.compare(m, n)).get(); System.out.println("Largest element: " + largest);
ืกืืืื:
findAny() ื- findFirst()
findAny() ืืืืืจ ืื ืจืืื ืืืจื ืืืืคืฆืืื ืื . ืื ืืืจื ืจืืง, ืืื ืืืืืจ ืื ืขืจื ืืืคืฆืืื ืื , ืฉืืืื ืจืืง. findFirst() ืืืืืจ ืืช ืืจืืื ืืจืืฉืื ืฉื ืืืจื ืืืืคืฆืืื ืื . ืืื ืืฉืืืช findAny() , ืื ืฉืืืช findFirst() ืืืืืจื ืคืจืืืจ ืืืคืฆืืื ืื ืจืืง ืื ืืืจื ืืืชืืื ืจืืง. ืืื ื ืกืชืื ืขื ืืืืืื ืืืื ืืืืืกืกืช ืขื ืฉืืืืช ืืื:Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); Optional<Integer> opt = numStream.findFirst();System.out.println(opt); numStream = Stream.empty(); opt = numStream.findAny();System.out.println(opt);
ืกืืืื:
allMatch() , anyMatch() ื- noneMatch()
ืืฉืืื allMatch() ืืฉืืฉืช ืืื ืืืืืง ืื ืื ืืจืืืืื ืืืจื ืชืืืืื ืืคืจืืืงื ืืกืืื ืืืืืืจื ืืช ืืขืจื ืืืืืืื ื true ืื ืื, ืืืจืช ืืืืืจื false . ืื ืืืจื ืจืืง, ืืื ืืืืืจ ืืืช . ืืฉืืื anyMatch() ืืฉืืฉืช ืืื ืืืืืง ืื ืืื ืืืจืืืืื ืืืจื ืชืืื ืืคืจืืืงื ืืกืืื. ืื ืืืืืจ ืืืช ืื ืื, ืื ื ืืื ืืืจืช. ืื ืืืจื ืจืืง, ืืื ืืืืืจ false . ืืฉืืื noneMatch() ืืืืืจื true ืื ืืฃ ืืืื ื ืืืจื ืื ืชืืื ืืช ืืคืจืืืงื, ื- false ืืืจืช. ืืืืื ืืืืืฉื ื ืจืืืช ืื:Stream<Integer> numStream = Stream.of(43, 65, 1, 98, 63); boolean flag = numStream.allMatch(n -> n1); System.out.println(flag); numStream = Stream.of(43, 65, 1, 98, 63); flag = numStream.anyMatch(n -> n1); System.out.println(flag); numStream = Stream.of(43, 65, 1, 98, 63); flag = numStream.noneMatch(n -> n==1);System.out.println(flag);
ืกืืืื:
ืืขืจืืืช ืขืฆืืืช ื-Java Stream
ืืขืจืื ืขืฆืื ืืช ืืืืืื ืืืืคืืืืืืฆืืืช ืืขืืืื ืขื Java Streams ื-Java 8. ืื ืืืืืืช ืืขืืงืจ ืืืืืช ืคืขืืืืช ืืื ืืื ืขื ืืืืชืงื ืืคืขืืืช ืืจืืื ื. ืืขืจืื ืขืฆืื ืืช ืืืจืืืช ืืื ืืขืช ืืืืื ืืืืชืจ ืฉื ืืฉืืืื ืืืืฉืืืื ืขื ืฉืชืืื ืฆืืจื ืืชืืฆืื ืืคืืขื. ืืจื ืืคืื ืื ืืืข ืืคืขืืืืช ืืื ืืื ื ืืฆืจ ืจืง ืืืืจ ืกืืื ืคืขืืืช ืืืจืืื ื. ืืขืจืื ืขืฆืื ืืช ืขืืืืช ืขื ืื ืคืขืืืืช ืืืื ืืื ืืืจืื Java. ืฉืืืืฉ ืืืื ืฉืืืืฉื ืืืขืจืื ืขืฆืื ืืช ืืชืจืืฉ ืืืฉืจ ืขืืืืื ืขื ืืจืืื ืืื ืกืืคืืื. ืื ื ืื ืขืื ืืจืื ืขืืืืืื ืืืืชืจืื.ืฆืื ืืจืืช ื-Java Stream
ืฆืื ืืจ ื-Java Stream ืืืจืื ืืืจื ืงืื, ืืคืก ืื ืืืชืจ ืคืขืืืืช ืืื ืืื ืืกืืืจืืช ืืื ืืืจ ืื, ืืืืกืืฃ ืคืขืืืช ืืจืืื ื. ืคืขืืืืช ืืื ืืื ื-Java Streams ืืืืฆืขืืช ืืขืฆืืชืืื. ืื ืืืคื ืืช ืคืขืืืืช ืืืื ืืื ืืฆื ืจืช ืืืืชื ื ืื ืขืืช. ืขื ืฆืื ืืจืืช, ืฉืื ืืขืฆื ืคืขืืืืช ืืื ืืื ืืฉืืืืืช ืืคื ืืกืืจ, ืืชืืคืฉืจ ืืืฆืืข ืขืฆื. ืฆืื ืืจืืช ืขืืืจืื ืืขืงืื ืืืจ ืคืขืืืืช ืืื ืืื ืฉืืฉ ืืืฆืข ืืืืจ ืฉืืืกืืฃ ื ืชืงืืื ืืคืขืืืช ืืจืืื ื.ืกืืืื
ืืขืช ื ืกืื ืืช ืื ืฉืืืื ื ืืืื. ืืืืืจ ืื:- ืืืงื ื ืื ืื ืืจืื Java.
- ืืืืจ ืืื ืืืื ื ืืื ืืงืืช ืจืืืช ืืฉืื ืืช ืืืฆืืจืช ืฉืจืฉืืจื Java ื-Java 8.
- ืืืื ื ืฉื ื ืกืืืื ืขืืงืจืืื ืฉื ืคืขืืืืช (ืคืขืืืืช ืืื ืืื ืืคืขืืืืช ืืจืืื ื) ืฉื ืืชื ืืืฆืข ืขื ืืจืื Java.
- ืืืืจ ืืื ืืกืชืืื ื ืืคืืจืื ืขื ืืื ืืืืืืืช ืฉื ืคืขืืืืช ืืื ืืื ืืคืขืืืืช ืืจืืื ืืืืช ืืืื.
- ืืกืืคื ืฉื ืืืจ ืืืื ื ืืืชืจ ืขื ืืขืจืื ืขืฆืื ืืช ืืืืกืืฃ ืืืื ื ืขื ืฆื ืจืช ืืฉืจืฉืืจื Java.
GO TO FULL VERSION