தொகுதி பாடங்கள் (2/2)
ஸ்ட்ரீம் ஏபிஐ
ஜாவாவில் உள்ள ஸ்ட்ரீம் ஏபிஐ, செயல்பாட்டு நிரலாக்கத்தை மேம்படுத்துவதன் மூலம், பொருள்களின் சேகரிப்புகளை ஒரு அறிவிப்பு வழியில் செயலாக்க உங்களை அனுமதிக்கிறது. ஒரு ஸ்ட்ரீம் தரவைச் சேமிப்பதில்லை, மாறாக ஒரு மூலத்திலிருந்து (பட்டியல் அல்லது வரிசை போன்றவை) செயல்பாடுகளின் குழாய் வழியாக கூறுகளைக் கொண்டு செல்கிறது.
ஒரு ஸ்ட்ரீம் பைப்லைன் மூன்று பகுதிகளைக் கொண்டுள்ளது:
- ஒரு ஆதாரம் (எ.கா.,
list.stream()) - பூஜ்யம் அல்லது அதற்கு மேற்பட்ட இடைநிலை செயல்பாடுகள் (புதிய ஸ்ட்ரீமை வழங்கும், எ.கா.,
filter,map) - ஒரு டெர்மினல் செயல்பாடு (இது இறுதி முடிவு அல்லது பக்கவிளைவை உருவாக்கி ஸ்ட்ரீமை மூடுகிறது, எ.கா.,
collect,forEach,reduce)
பொதுவான இடைநிலை செயல்பாடுகள்
இடைநிலை செயல்பாடுகள் சோம்பேறித்தனமானவை: முனைய செயல்பாடு செயல்படுத்தப்படும் வரை அவை செயல்படுத்தப்படாது.
filter(Predicate): பூலியன் நிபந்தனையின் அடிப்படையில் உறுப்புகளை வடிகட்டுகிறது.map(Function): செயல்பாட்டைப் பயன்படுத்துவதன் மூலம் ஒவ்வொரு உறுப்பையும் மற்றொரு பொருளாக மாற்றுகிறது.sorted(): ஸ்ட்ரீமின் கூறுகளை வரிசைப்படுத்துகிறது.
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
.filter(name -> name.startsWith("M"))
.map(name -> name.toUpperCase())
.collect(Collectors.toList()); // "MARCO"பொதுவான முனைய செயல்பாடுகள்
forEach(Consumer): ஸ்ட்ரீமின் ஒவ்வொரு உறுப்புக்கும் ஒரு செயலைச் செய்கிறது.collect(Collector): ஸ்ட்ரீம் முடிவுகளை ஒரு கொள்கலனில் சேகரிக்கிறது (எ.கா.,Collectors.toList()ஐப் பயன்படுத்தும் பட்டியல்).reduce(identity, BinaryOperator): ஸ்ட்ரீம் கூறுகளை ஒற்றை ஒட்டுமொத்த மதிப்பாக இணைக்கிறது.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b); // Sums all numbers: 10நீங்களே முயற்சி செய்து பாருங்கள்
சம எண்களை மட்டும் வடிகட்ட, எண்களின் ஸ்ட்ரீமைப் பயன்படுத்தி குறியீட்டை முடிக்கவும், அவற்றை ஈவன்ஸ் என்ற புதிய பட்டியலில் சேகரித்து, System.out.println ஐப் பயன்படுத்தி அச்சிடவும்.
குறிப்பைக் காட்டு
`numbers.stream()` ஐ அழைப்பதன் மூலம் தொடங்கவும், `.filter(n -> n % 2 == 0)` ஐ இணைத்து, இறுதியாக `.collect(Collectors.toList())` உடன் சேகரிக்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
வரைபடத்தைப் பயன்படுத்தி பெயர்கள் பட்டியலில் உள்ள அனைத்து பெயர்களையும் பெரிய எழுத்துக்கு மாற்ற ஸ்ட்ரீம்களைப் பயன்படுத்தவும், மேலும் முறை குறிப்புடன் forEach ஐப் பயன்படுத்தி அவற்றை ஒவ்வொன்றாக அச்சிடவும்.
குறிப்பைக் காட்டு
`.map(s -> s.toUpperCase())`ஐத் தொடர்ந்து `.forEach(System.out::println)` என்ற முனையச் செயல்பாட்டைப் பயன்படுத்தவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
ஒரு ஸ்ட்ரீமைப் பயன்படுத்தி எண்கள் பட்டியலில் உள்ள அனைத்து எண்களின் கூட்டுத்தொகையைக் கணக்கிடுவதன் மூலம் குறியீட்டை முடிக்கவும் மற்றும் தொடக்க மதிப்பான 0 உடன் டெர்மினல் செயல்பாட்டை குறைக்கவும். தொகையை அச்சிடவும்.
குறிப்பைக் காட்டு
`numbers.stream().reduce(0, (a, b) -> a + b)` ஐப் பயன்படுத்தி அதன் விளைவாக வரும் மாறியை அச்சிடவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்