-
Gaya fungsional sing dienalake ing Jawa 8 mbantu nyuda jurang antarane logika bisnis lan kode. Iki ngidini kita nyritakake crita kanthi aliran alami ing tingkat sing luwih dhuwur. Tinimbang ngomong carane arep nindakake, sampeyan bisa ngomong apa sing arep kanggo nindakake.
-
Kode dadi luwih resik lan luwih ringkes.
-
Fungsi urutan dhuwur ngidini kita:
- Kirimi fungsi menyang fungsi liyane
- Nggawe fungsi ing fungsi liyane
- Wangsulake fungsi saka fungsi liyane
Iki minangka kamenangan gedhe kanggo Jawa, ing ngendi kita kudu ngirim, nggawe, lan ngasilake obyek kanggo nindakake iki. Kita bakal bisa nulis kode sing luwih dipercaya, fokus, lan luwih gampang digunakake maneh.
-
Thanks kanggo lambdas, kita bisa nindakake petungan males. Nalika ekspresi lambda dikirim minangka argumen metode, kompiler bakal ngevaluasi nalika diarani metode kasebut. Iki beda karo argumen metode normal, sing langsung dievaluasi.
-
Lambdas nggawe tes unit nulis nyenengake. Dheweke ngidini kita nggawe tes entheng sing resik, ukurane cilik, lan cepet nulis. Kita bisa ROOT kode ing test nggunakake lambdas. Iki ngidini kita nyoba carane kabeh jinis skenario bakal mengaruhi kode.
-
Pola anyar kanggo sinau.
-
Lan akeh liyane!
break
, dramatically ngganti prilaku daur ulang, meksa kita ngerti ora mung apa kode nyoba kanggo entuk, continue
nanging return
uga kanggo ngerti carane daur ulang bisa. Saiki kita bakal ndeleng kepiye carane bisa ngowahi puteran dadi kode sing luwih ringkes lan bisa diwaca.
Ayo coding diwiwiti!
Kita bakal nggarap artikel. Artikel nduweni judhul, penulis lan sawetara tag.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;
}
}
Saben conto bakal ngemot solusi tradisional nggunakake puteran lan solusi nggunakake fitur anyar Jawa 8. Ing conto pisanan, kita pengin nemokake artikel pisanan ing koleksi kanthi tag "Jawa". Ayo goleki solusi kanthi nggunakake loop.
public Article getFirstJavaArticle() {
for (Article article : articles) {
if (article.getTags().contains("Java")) {
return article;
}
}
return null;
}
Saiki ayo ngrampungake masalah kasebut nggunakake operasi saka Stream API.
public Optional<Article> getFirstJavaArticle() {
return articles.stream()
.filter(article -> article.getTags().contains("Java"))
.findFirst();
}
Apik banget, ta? Pisanan kita nggunakake operasi filter
kanggo nemokake kabeh artikel kanthi tag "Jawa", banjur kita gunakake findFirst()
kanggo entuk kedadeyan pisanan. Wiwit stream kesed lan saringan ngasilake stream, pendekatan iki mung bakal ngolah unsur nganti nemokake pertandhingan pisanan. Saiki ayo entuk kabeh artikel sing diwenehi tag "Jawa" tinimbang mung sing pisanan. Kaping pisanan, solusi nggunakake puteran.
public List<Article> getAllJavaArticles() {
List<Article> result = new ArrayList<>();
for (Article article : articles) {
if (article.getTags().contains("Java")) {
result.add(article);
}
}
return result;
}
Solusi nggunakake operasi stream.
public List<Article> getAllJavaArticles() {
return articles.stream()
.filter(article -> article.getTags().contains("Java"))
.collect(Collectors.toList());
}
Ing conto iki, kita nggunakake operasi collect
kanggo shorten stream asil, tinimbang wara-wara koleksi lan tegas nambah entri sing cocog. Nganti saiki apik. Wektu kanggo conto sing bakal nggawe Stream API pancen sumunar. Ayo klompok kabeh artikel miturut penulis. Kaya biasane, kita miwiti kanthi ngrampungake kanthi nggunakake puteran:
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;
}
Apa kita bisa nemokake solusi sing resik kanggo masalah iki nggunakake operasi stream?
public Map<String, List<Article>> groupByAuthor() {
return articles.stream()
.collect(Collectors.groupingBy(Article::getAuthor));
}
apik tenan! Kanthi nggunakake operasi groupingBy
lan referensi metode getAuthor()
, kita entuk kode sing resik lan bisa diwaca. Saiki ayo goleki tag liyane sing digunakake ing koleksi kasebut. Ayo dadi miwiti karo conto loop:
public Set<String> getDistinctTags() {
Set<String> result = new HashSet<>();
for (Article article : articles) {
result.addAll(article.getTags());
}
return result;
}
Oke, ayo goleki carane ngatasi iki kanthi nggunakake operasi stream:
public Set<String> getDistinctTags() {
return articles.stream()
.flatMap(article -> article.getTags().stream())
.collect(Collectors.toSet());
}
Kelangan! flatmap
mbantu kita flatten dhaftar tag menyang stream asil siji, kang banjur digunakake collect
kanggo nggawe pesawat bali.
GO TO FULL VERSION