-
جاوا 8 ۾ متعارف ٿيل فنڪشنل انداز اسان کي ڪاروباري منطق ۽ ڪوڊ جي وچ ۾ فرق کي گهٽائڻ ۾ مدد ڪري ٿو. اهو اسان کي ڪهاڻي ٻڌائڻ جي اجازت ڏئي ٿو قدرتي وهڪري ۾ هڪ اعلي سطح تي. اهو چوڻ بدران ته توهان اهو ڪيئن ڪرڻ چاهيو ٿا، توهان اهو چئي سگهو ٿا ته توهان ڇا ڪرڻ چاهيو ٿا.
-
ڪوڊ صاف ۽ وڌيڪ جامع ٿيندو.
-
هاء آرڊر افعال اسان کي اجازت ڏين ٿا:
- ڪمن کي ٻين ڪمن ڏانهن موڪليو
- ٻين ڪمن جي اندر فنڪشن ٺاهيو
- ٻين ڪمن مان افعال واپس آڻيو
اها جاوا لاءِ هڪ وڏي فتح آهي، جتي اسان کي اهو ڪرڻ لاءِ شيون موڪلڻ، ٺاهڻ ۽ واپس ڪرڻ گهرجن. اسان ڪوڊ لکڻ جي قابل ٿي وينداسين جيڪو وڌيڪ قابل اعتماد، مرڪوز، ۽ ٻيهر استعمال ڪرڻ آسان آهي.
-
ليمبڊاس جي مهرباني، اسان سست حساب ڪري سگهون ٿا. جڏهن هڪ ليمبڊا اظهار هڪ طريقي جي دليل جي طور تي موڪليو ويو آهي، مرتب ڪندڙ ان جو جائزو وٺندو جڏهن اهو طريقو ۾ سڏيو ويندو آهي. اهو عام طريقو دليلن کان مختلف آهي، جن کي فوري طور تي جائزو ورتو وڃي ٿو.
-
Lambdas لکڻ يونٽ ٽيسٽ کي مزيدار بڻائي ٿو. اهي اسان کي هلڪو وزن ٽيسٽ ٺاهڻ جي اجازت ڏين ٿا جيڪي صاف، سائيز ۾ ننڍا، ۽ جلدي لکڻ لاء. اسان ليمبڊاس استعمال ڪندي ٽيسٽ تحت ڪوڊ ڪڍي سگھون ٿا. هي اسان کي جانچڻ جي اجازت ڏئي ٿو ته سڀني قسمن جا منظرنامو ڪوڊ کي ڪيئن متاثر ڪندا.
-
سکڻ لاءِ نوان نمونا.
-
۽ گهڻو ڪجهه!
break
، ڊرامائي طور تي لوپ جي رويي کي تبديل ڪندي، اسان کي نه رڳو اهو سمجهڻ تي مجبور ڪري ٿو ته ڪوڊ حاصل ڪرڻ جي ڪوشش ڪري رهيو آهي، continue
پر return
اهو پڻ سمجهڻ لاء ته لوپ ڪيئن ڪم ڪري ٿو. هاڻي اسان هڪ نظر وجهنداسين ته ڪيئن اسان لوپس کي وڌيڪ جامع ۽ پڙهڻ لائق ڪوڊ ۾ تبديل ڪري سگهون ٿا.
اچو ته ڪوڊنگ شروع ڪريو!
اسان آرٽيڪل سان ڪم ڪنداسين. هڪ مضمون ۾ هڪ عنوان، ليکڪ ۽ ڪيترائي ٽيگ آهن.private class Article {
private final String title;
private final String author;
private final List<String> tags;
private Article(String title, String author, List<String> tags) {
this.title = title;
this.author = author;
this.tags = tags;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public List<String> getTags() {
return tags;
}
}
هر مثال ۾ لوپ استعمال ڪندي روايتي حل ۽ جاوا 8 جي نئين خاصيتن کي استعمال ڪندي هڪ حل شامل هوندو. پهرين مثال ۾، اسين "جاوا" ٽيگ سان گڏ ڪيل پهريون مضمون ڳولڻ چاهيون ٿا. اچو ته هڪ لوپ استعمال ڪندي حل تي هڪ نظر وٺو.
public Article getFirstJavaArticle() {
for (Article article : articles) {
if (article.getTags().contains("Java")) {
return article;
}
}
return null;
}
ھاڻي اچو ته مسئلو حل ڪريون اسٽريم API مان آپريشنز استعمال ڪندي.
public Optional<Article> getFirstJavaArticle() {
return articles.stream()
.filter(article -> article.getTags().contains("Java"))
.findFirst();
}
تمام سٺو، اهو ناهي؟ اسان سڀ کان پهريان آپريشن استعمال ڪريون ٿا filter
سڀ مضمون ڳولڻ لاءِ ٽيگ ”جاوا“ سان، پوءِ استعمال ڪريون ٿا findFirst()
پهريون واقعو حاصل ڪرڻ لاءِ. جيئن ته وهڪرو سست آهن ۽ فلٽر هڪ وهڪرو واپس ڪري ٿو، اهو طريقو صرف عناصر تي عمل ڪندو جيستائين اهو پهريون ميچ ڳولي. ھاڻي اچو ته سڀني مضمونن کي ٽيگ ٿيل "جاوا" بجاء صرف پھرين ھڪڙو. پهريون حل لوپ استعمال ڪندي.
public List<Article> getAllJavaArticles() {
List<Article> result = new ArrayList<>();
for (Article article : articles) {
if (article.getTags().contains("Java")) {
result.add(article);
}
}
return result;
}
وهڪرو آپريشن استعمال ڪندي حل.
public List<Article> getAllJavaArticles() {
return articles.stream()
.filter(article -> article.getTags().contains("Java"))
.collect(Collectors.toList());
}
هن مثال ۾، اسان هڪ آپريشن استعمال ڪيو collect
نتيجي واري وهڪري کي مختصر ڪرڻ لاءِ، بجاءِ گڏ ڪرڻ جو اعلان ڪرڻ ۽ واضح طور تي شامل ڪيل داخلائن کي شامل ڪرڻ بجاءِ. هينئر تائين تمام سٺو. مثالن لاءِ وقت جيڪي اسٽريم API کي واقعي چمڪائيندا. اچو ته ليکڪ جي سڀني مضمونن کي گروپ ڪريون. عام طور تي، اسان ان کي حل ڪندي لوپ استعمال ڪندي شروع ڪريون ٿا:
public Map<String, List<Article>> groupByAuthor() {
Map<String, List<Article>> result = new HashMap<>();
for (Article article : articles) {
if (result.containsKey(article.getAuthor())) {
result.get(article.getAuthor()).add(article);
} else {
ArrayList<Article> articles = new ArrayList<>();
articles.add(article);
result.put(article.getAuthor(), articles);
}
}
return result;
}
ڇا اسان وهڪرو آپريشن استعمال ڪندي هن مسئلي جو صاف حل ڳولي سگهون ٿا؟
public Map<String, List<Article>> groupByAuthor() {
return articles.stream()
.collect(Collectors.groupingBy(Article::getAuthor));
}
حيرت انگيز! groupingBy
هڪ آپريشن ۽ طريقي جي حوالي سان استعمال ڪندي getAuthor()
، اسان صاف ۽ پڙهيل ڪوڊ حاصل ڪندا آهيون. هاڻي اچو ته مجموعي ۾ استعمال ٿيل باقي ٽيگ ڳوليون. اچو ته لوپ مثال سان شروع ڪريون:
public Set<String> getDistinctTags() {
Set<String> result = new HashSet<>();
for (Article article : articles) {
result.addAll(article.getTags());
}
return result;
}
ٺيڪ آهي، اچو ته هڪ نظر رکون ته اسان هن کي ڪيئن حل ڪري سگهون ٿا وهڪرو آپريشن استعمال ڪندي:
public Set<String> getDistinctTags() {
return articles.stream()
.flatMap(article -> article.getTags().stream())
.collect(Collectors.toSet());
}
عمده! flatmap
اسان جي مدد ڪري ٿي ٽيگ جي فهرست کي هڪ واحد نتيجن واري وهڪرو ۾، جنهن کي اسين پوءِ collect
واپسي سيٽ ٺاهڻ لاءِ استعمال ڪندا آهيون.
GO TO FULL VERSION