-
Java 8-de girizilen funksional stil, iş logikasy bilen koduň arasyndaky boşlugy azaltmaga kömek edýär. Hekaýany has ýokary derejede tebigy akymda gürrüň bermäge mümkinçilik berýär. Muny nädip etjekdigiňizi aýtmagyň ýerine, etjek bolýan zadyňyzy aýdyp bilersiňiz.
-
Kod has arassa we has gysga bolýar.
-
Orderokary tertipli funksiýalar:
- Funksiýalary beýleki funksiýalara iberiň
- Beýleki funksiýalaryň içinde funksiýalar dörediň
- Funksiýalary beýleki funksiýalardan gaýtaryň
Munuň üçin obýektleri ibermeli, döretmeli we yzyna gaýtarmaly Java üçin bu uly ýeňiş. Has ygtybarly, gönükdirilen we gaýtadan ulanmak aňsat bolan kod ýazyp bileris.
-
Lambdalaryň kömegi bilen ýalta hasaplamalary edip bileris. Lambda aňlatmasy usul argumenti hökmünde iberilende, düzüji usulda çagyrylanda baha berer. Bu derrew baha berilýän adaty usul argumentlerinden tapawutlanýar.
-
Lambdas ýazuw bölüminiň synaglaryny gyzykly edýär. Arassa, ululygy az we ýazmaga çalt ýeňil synaglary döretmäge mümkinçilik berýär. Synag astynda kody lambdas ulanyp kökläp bileris. Bu, her dürli ssenariýanyň koda nähili täsir etjekdigini barlamaga mümkinçilik berýär.
-
Öwrenmegiň täze nusgalary.
-
Has köp zat!
break
, aýlawyň özüni alyp barşyny düýpgöter üýtgedýär, bizi diňe koduň nämä ýetjek bolýandygyna düşünmäge däl continue
-de , return
aýlawyň işleýşine düşünmäge mejbur edýär. Indi aýlawlary has gysga we okalýan koda öwrüp biljekdigimize göz aýlarys.
Kodlaşdyrma başlalyň!
Makalalar bilen işläris. Makalanyň ady, awtory we birnäçe belligi bar.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;
}
}
Her mysalda aýlawlary ulanyp adaty çözgüt we Java 8-iň täze aýratynlyklaryny ulanyp çözgüt bolar. Birinji mysalda, ýygyndyda ilkinji makalany “Java” belligi bilen tapmak isleýäris. Aýlaw ulanyp, çözgüdi gözden geçireliň.
public Article getFirstJavaArticle() {
for (Article article : articles) {
if (article.getTags().contains("Java")) {
return article;
}
}
return null;
}
Indi “Stream API” operasiýalaryny ulanyp meseläni çözeliň.
public Optional<Article> getFirstJavaArticle() {
return articles.stream()
.filter(article -> article.getTags().contains("Java"))
.findFirst();
}
Gowy, şeýlemi? filter
Ilki bilen “Java” belligi bilen ähli makalalary tapmak üçin amaly ulanýarys , soň bolsa findFirst()
ilkinji gezek ýüze çykýarys. Akymlar ýalta we süzgüç akymy yzyna gaýtaryp berýändigi sebäpli, bu çemeleşme diňe birinji gabat gelýänçä elementleri gaýtadan işlär. Indi diňe birinjisiniň ýerine “Java” bellikli makalalary alalyň. Ilki bilen aýlawlary ulanyp çözgüt.
public List<Article> getAllJavaArticles() {
List<Article> result = new ArrayList<>();
for (Article article : articles) {
if (article.getTags().contains("Java")) {
result.add(article);
}
}
return result;
}
Akym amallaryny ulanmak arkaly çözgüt.
public List<Article> getAllJavaArticles() {
return articles.stream()
.filter(article -> article.getTags().contains("Java"))
.collect(Collectors.toList());
}
collect
Bu mysalda, kolleksiýa yglan etmek we gabat gelýän ýazgylary aç-açan goşmak däl-de, emele gelen akymy gysgaltmak üçin bir operasiýa ulandyk . Häzirlikçe gaty gowy. “Stream API” -ni hakykatdanam ýagtylandyrjak mysallar üçin wagt. Geliň, ähli makalalary awtoryň toparlaryna bölýäris. Hemişe bolşy ýaly, aýlawlary ulanyp çözýäris:
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;
}
Akym amallaryny ulanyp, bu meseläniň arassa çözgüdini tapyp bilerismi?
public Map<String, List<Article>> groupByAuthor() {
return articles.stream()
.collect(Collectors.groupingBy(Article::getAuthor));
}
Geň galdyryjy! groupingBy
Amal we usul salgylanmasy ulanyp getAuthor()
, arassa we okalýan kod alýarys. Indi ýygyndyda ulanylýan bellikleriň galan bölegini tapalyň. Geliň, aýlawly mysal bilen başlalyň:
public Set<String> getDistinctTags() {
Set<String> result = new HashSet<>();
for (Article article : articles) {
result.addAll(article.getTags());
}
return result;
}
Bolýar, akym amallaryny ulanyp muny nädip çözüp boljakdygyna göz aýlalyň:
public Set<String> getDistinctTags() {
return articles.stream()
.flatMap(article -> article.getTags().stream())
.collect(Collectors.toSet());
}
Salkyn! flatmap
bellikleriň sanawyny ýekeje netije akymyna düzmäge kömek edýär, soň bolsa collect
yzyna gaýtarmak toplumyny döretmek üçin ulanýarys.
GO TO FULL VERSION