2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
जावा ८ अनेकानि नूतनानि विशेषतानि प्रवर्तयति, येषु सर्वाधिकं उल्लेखनीयं भवति Lambda expressions तथा Stream API इति । Stream API संग्रहदत्तांशसंसाधितुं कुशलं संक्षिप्तं च पद्धतिं प्रदाति, यत् कोडं अधिकं संक्षिप्तं स्पष्टं च करोति, तथा च उच्चपठनीयता, परिपालनक्षमता च भवति अयं लेखः जावा स्ट्रीम एपिआइ इत्यस्य उपयोगे गहनतया गमिष्यति, यत्र मूलभूतसंकल्पनाः, सामान्यसञ्चालनानि, समानान्तरप्रक्रियाकरणं, व्यावहारिकप्रकरणाः, उत्तमप्रथाः च सन्ति ।
Stream API इति संग्रहदत्तांशसंसाधनार्थं जावा 8 इत्यस्मिन् प्रवर्तितं अमूर्तं यत् घोषणात्मकरूपेण (SQL कथनानां सदृशं) आँकडानां संसाधनं कर्तुं अनुमतिं ददाति Stream API अनेकानि शक्तिशालिनः कार्याणि प्रदाति येषां उपयोगेन संग्रहेषु छानयितुं, क्रमबद्धुं, नक्शाङ्कयितुं, न्यूनीकर्तुं अन्ये च कार्याणि कर्तुं शक्यन्ते, येन कोडः बहु सरलः भवति ।
Stream API इत्यनेन Stream इत्यस्य निर्माणस्य विविधाः उपायाः प्रदत्ताः सन्ति ।
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
String[] array = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(array);
Stream.of
:Stream<String> stream = Stream.of("a", "b", "c");
Stream.generate
:Stream<Double> stream = Stream.generate(Math::random).limit(10);
Stream.iterate
:Stream<Integer> stream = Stream.iterate(0, n -> n + 2).limit(10);
Stream परिवर्तनार्थं मध्यवर्तीक्रियाणां उपयोगः भवति तथा च आलस्येन मूल्याङ्कनं भवति सामान्यमध्यवर्तीकार्यक्रमेषु निम्नलिखितम् अन्तर्भवति ।
filter
: तत्त्वानां छाननाय प्रयुक्तम् ।Stream<String> stream = list.stream().filter(s -> s.startsWith("a"));
map
: प्रत्येकं तत्त्वं तत्सम्बद्धं परिणामं प्रति मैप् कर्तुं प्रयुक्तम् ।Stream<String> stream = list.stream().map(String::toUpperCase);
flatMap
: प्रत्येकं तत्त्वं Stream मध्ये परिवर्तयितुं ततः एकस्मिन् Stream मध्ये विलीनीकरणाय उपयुज्यते ।Stream<String> stream = list.stream().flatMap(s -> Stream.of(s.split("")));
distinct
: द्वितीयकं दूरीकर्तुं प्रयुक्तम्।Stream<String> stream = list.stream().distinct();
sorted
: क्रमणार्थं प्रयुक्तम् ।Stream<String> stream = list.stream().sorted();
peek
: प्रसंस्करणकाले प्रत्येकं तत्त्वं द्रष्टुं प्रयुक्तम् ।Stream<String> stream = list.stream().peek(System.out::println);
Stream इत्यस्य गणनां आरभ्य परिणामं जनयितुं टर्मिनल्-सञ्चालनानां उपयोगः भवति ।
forEach
: प्रत्येकं तत्त्वे एकं ऑपरेशनं कुर्वन्तु।list.stream().forEach(System.out::println);
collect
: Stream इत्येतत् अन्यरूपेण परिवर्तयन्तु।List<String> result = list.stream().collect(Collectors.toList());
reduce
: Stream इत्यस्मिन् तत्त्वानि मूल्ये न्यूनीकरोतु ।Optional<String> result = list.stream().reduce((s1, s2) -> s1 + s2);
toArray
:Stream इत्येतत् array इत्यत्र परिवर्तयन्तु ।String[] array = list.stream().toArray(String[]::new);
count
: तत्त्वानां संख्यां गणयतु।long count = list.stream().count();
anyMatch
、allMatch
、noneMatch
: मेलनिर्णयस्य कृते प्रयुक्तम्।boolean anyMatch = list.stream().anyMatch(s -> s.startsWith("a"));
boolean allMatch = list.stream().allMatch(s -> s.startsWith("a"));
boolean noneMatch = list.stream().noneMatch(s -> s.startsWith("a"));
findFirst
、findAny
: तत्त्वान् अन्वेष्टुं प्रयुक्तम्।Optional<String> first = list.stream().findFirst();
Optional<String> any = list.stream().findAny();
उपयुञ्जताम्sorted
विधिः Stream क्रमेण क्रमयति तथा च तुलनात्मके पारयितुं शक्नोति ।
List<String> list = Arrays.asList("b", "c", "a");
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());
// 逆序排序
List<String> sortedListDesc = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
उपयुञ्जताम्filter
Stream इत्यस्मिन् तत्त्वानि छानयितुं विधिः ।
List<String> list = Arrays.asList("a", "b", "c");
List<String> filteredList = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
उपयुञ्जताम्map
विधिः Stream इत्यस्मिन् तत्त्वानां नक्शाङ्कनं करोति ।
List<String> list = Arrays.asList("a", "b", "c");
List<String> mappedList = list.stream().map(String::toUpperCase).collect(Collectors.toList());
उपयुञ्जताम्reduce
Stream इत्यस्मिन् तत्त्वानि न्यूनीकर्तुं विधिः ।
List<String> list = Arrays.asList("a", "b", "c");
String result = list.stream().reduce("", (s1, s2) -> s1 + s2);
उपयुञ्जताम्collect
विधिः Stream इत्येतत् अन्यरूपेण परिवर्तयति ।
List<String> list = Arrays.asList("a", "b", "c");
List<String> collectedList = list.stream().collect(Collectors.toList());
Set<String> collectedSet = list.stream().collect(Collectors.toSet());
String joinedString = list.stream().collect(Collectors.joining(","));
Parallel Stream बहु-कोर CPUs इत्यस्य लाभस्य पूर्णं उपयोगं कृत्वा आँकडासंसाधनदक्षतां सुधारयितुम् अर्हति ।उपयोक्तुं शक्नोतिparallelStream
विधिः समानान्तरं Stream निर्माति ।
List<String> list = Arrays.asList("a", "b", "c");
List<String> parallelList = list.parallelStream().map(String::toUpperCase).collect(Collectors.toList());
अपि उपयोक्तुं शक्यतेparallel
विधिः सामान्यं Stream समानान्तरं Stream मध्ये परिवर्तयति ।
List<String> list = Arrays.asList("a", "b", "c");
List<String> parallelList = list.stream().parallel().map(String::toUpperCase).collect(Collectors.toList());
ज्ञातव्यं यत् parallel Stream सर्वदा serial Stream इत्यस्मात् द्रुततरं न भवति, विशिष्टस्थित्यानुसारं तस्य परीक्षणस्य आवश्यकता भवति ।
स्ट्रिंग्-सङ्ग्रहं दत्त्वा, येषां स्ट्रिंग्-दीर्घता 3 तः न्यूना भवति, तान् फ़िल्टर कृत्वा शेष-स्ट्रिंग्-इत्येतत् बृहत्-अक्षर-रूपेण परिवर्तयन्तु ।
List<String> list = Arrays.asList("a", "ab", "abc", "abcd");
List<String> result = list.stream()
.filter(s -> s.length() >= 3)
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(result); // 输出:[ABC, ABCD]
पूर्णाङ्कानां समुच्चयं दत्त्वा सर्वेषां पूर्णाङ्कानां औसतं गणयन्तु ।
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
OptionalDouble average = list.stream()
.mapToInt(Integer::intValue)
.average();
average.ifPresent(System.out::println); // 输出:3.0
Stream API इत्यस्य उपयोगः
सञ्चिकायाः सामग्रीं पठन्तु, कन्सोल् प्रति निर्गमं च कुर्वन्तु ।
try (Stream<String> lines = Files.lines(Paths.get("example.txt"))) {
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
सञ्चिकासामग्री पठित्वा प्रत्येकस्य शब्दस्य आवृत्तीनां संख्यां गणयन्तु ।
try (Stream<String> lines = Files.lines(Paths.get("example.txt"))) {
Map<String, Long> wordCount = lines
.flatMap(line -> Arrays.stream(line.split("\W+")))
.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));
wordCount.forEach((word, count) -> System.out.println(word + ": " + count));
} catch (IOException e) {
e.printStackTrace();
}
अस्माकं कृते database table अस्ति इति वदामःusers
, क्षेत्राणि युक्तम्id
、name
तथाage
. प्रश्नपरिणामानां संसाधनार्थं वयं Stream API इत्यस्य उपयोगं कर्तुं शक्नुमः ।
List<User> users = queryDatabase();
List<String> names = users.stream()
.filter(user -> user.getAge() > 18)
.map(User::getName)
.collect(Collectors.toList());
System.out.println(names);
Collectors
वर्गे विविधाः संग्राहकाः प्रदत्ताः सन्ति, विशिष्टापेक्षानुसारं भवान् समुचितं संग्राहकं चिन्वितुं शक्नोति ।एकदा Stream उपभोक्तं जातं चेत् पुनः तस्य उपयोगः कर्तुं न शक्यते यदि भवान् तस्य पुनः उपयोगं कर्तुं प्रवृत्तः अस्ति तर्हि भवान् Stream इत्यस्य उपयोगात् पूर्वं संग्रहे परिवर्तनं कर्तुं विचारयितुं शक्नोति ।
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
stream.forEach(System.out::println); // 会抛出IllegalStateException
समानान्तर धाराः सर्वदा क्रमिकधाराणाम् अपेक्षया द्रुततराः न भवन्ति, तेषां परीक्षणं प्रकरण-प्रकरण-आधारेण करणीयम् ।उपयोक्तुं शक्नोतिForkJoinPool
समानान्तर Stream इत्यस्य कार्यक्षमतां अनुकूलितुं ।
ForkJoinPool customThreadPool = new ForkJoinPool(4);
customThreadPool.submit(() ->
list.parallelStream().forEach(System.out::println)
).get();
बृहत् परिमाणं दत्तांशं संसाधितुं Stream API इत्यस्य उपयोगं कुर्वन् भवद्भिः स्मृति-लीक-समस्यायां ध्यानं दातव्यम् ।उपयोक्तुं शक्नोतिclose
विधिः Stream बन्दं कर्तुं, अथवा उपयोगं कर्तुंtry-with-resources
statement स्वयमेव Stream बन्दं करोति ।
try (Stream<String> lines = Files.lines(Paths.get("example.txt"))) {
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
अस्मिन् लेखे जावा स्ट्रीम एपिआइ इत्यस्य उपयोगस्य विस्तरेण परिचयः कृतः, यत्र मूलभूतसञ्चालनम्, उन्नतसञ्चालनम्, समानान्तरप्रक्रियाकरणं, व्यावहारिकप्रकरणाः, उत्तमप्रथाः च सन्ति । Stream API इत्यस्य तर्कसंगतरूपेण उपयोगं कृत्वा विकासकाः कोडस्य बहु सरलीकरणं, कोडस्य पठनीयतां, परिपालनक्षमतां च सुधारयितुम्, आँकडासंसाधनस्य कार्यक्षमतां च सुधारयितुं शक्नुवन्ति आशासे यत् एषः लेखः भवतः जावा विकासे Stream API इत्यस्य उपयोगाय सहायकः भविष्यति।
जावा स्ट्रीम एपिआइ संग्रहदत्तांशसंसाधनार्थं एकं शक्तिशाली साधनम् अस्ति विभिन्नसञ्चालनानां लचीलप्रयोगद्वारा कुशलदत्तांशसंसाधनं स्ट्रीमिंगगणना च प्राप्तुं शक्यते । यदि भवान् Stream API इत्यस्य उपयोगं न कृतवान् तर्हि यथाशीघ्रं एतत् शक्तिशाली साधनं ज्ञात्वा निपुणतां प्राप्तुं अनुशंसितं भवति तथा च विकासदक्षतां कोडगुणवत्तां च सुधारयितुम् स्वस्य परियोजनायां प्रयोक्तुं शक्यते