మాడ్యూల్ పాఠాలు (2/2)
స్ట్రీమ్ API
జావాలోని స్ట్రీమ్ API ఫంక్షనల్ ప్రోగ్రామింగ్ను ప్రభావితం చేస్తూ డిక్లరేటివ్ పద్ధతిలో వస్తువుల సేకరణలను ప్రాసెస్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. స్ట్రీమ్ డేటాను నిల్వ చేయదు, బదులుగా ఆపరేషన్ల పైప్లైన్ ద్వారా మూలం (జాబితా లేదా శ్రేణి వంటివి) నుండి మూలకాలను తీసుకువెళుతుంది.
స్ట్రీమ్ పైప్లైన్ మూడు భాగాలను కలిగి ఉంటుంది:
- ఒక మూలం (ఉదా.,
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 ఉపయోగించి వాటిని ఒక్కొక్కటిగా ముద్రించండి.
సూచనను చూపించు
టెర్మినల్ ఆపరేషన్ `.forEach(System.out::println)` తర్వాత `.map(s -> s.toUpperCase())`ని ఉపయోగించండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
స్ట్రీమ్ను ఉపయోగించి సంఖ్యల జాబితాలోని అన్ని సంఖ్యల మొత్తాన్ని లెక్కించడం ద్వారా కోడ్ను పూర్తి చేయండి మరియు ప్రారంభ విలువ 0తో టెర్మినల్ ఆపరేషన్ తగ్గించండి. మొత్తాన్ని ముద్రించండి.
సూచనను చూపించు
`numbers.stream().reduce(0, (a, b) -> a + b)`ని ఉపయోగించండి మరియు ఫలిత వేరియబుల్ను ప్రింట్ చేయండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది