【Java 8新機能】Java 8 flatMap使用例
文書ディレクトリ 1.Listで`Stream.flatMap`メソッド を使用2.Listリストで`Stream.flatMap`メソッド を使用3.Arrayで‘Stream.flatMap’メソッド を使用4.オブジェクト配列に‘Stream.flatMap’メソッド を使用5.`Files.lines()`に`Stream.flatMap`メソッド を使用 6.`Optional flatMap` コードダウンロード 参考文献 このページでは、
Javaドキュメントでは、
元のデータ型の場合、
1.リストにおける
ここには作家のリストがあります.どの作家にも本のリストがある.
2.
ここでの結果は
3.
コードを見てみましょう
FlatmapWithList.java
Writer.java
Book.java
BookComparator.java
しゅつりょく
2.Listリストにおける
ここでは、リスト付き
FlatmapWithListOfList.java
しゅつりょく
3.Arrayにおける
ここでは、配列付き
2.
3.
具体的なコード例を見てみましょう
FlatMapWithArray.java
しゅつりょく
4.オブジェクト配列における
ここでは、オブジェクト配列を有する
FlatMapWithArrayOfObject.java
しゅつりょく
5.
info.txt
FlatMapWithFile.java
しゅつりょく
6.
OptionalflatMap.java
Country.java
Person.java
しゅつりょく
コードのダウンロード
java-8-flatmap-example.zip
参考文献
【1】Java 8 flatMap Example
Java8 FlatMap
の例を示します.ここではStream.flatMap
およびOptional.flatMap()
の方法について論じる.Stream.flatMap()
は、ソースストリームの各要素をマッピング関数で置換した要素を含み、結果をフラット化するストリームを返します.マッピング関数はストリームを生成し、マッピングが適用された後に各マッピングストリームを閉じます.オブジェクトストリームに統計関数を適用することは有用であり、1行で符号化することができる.Optional.flatMap()
値が存在する場合、オプションの方位マッピング関数が適用されます.以下に、異なるシーンにおけるflatMap
の例を示す.Javaドキュメントでは、
Stream.flatMap()
メソッドの定義は次のとおりです.<R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
Optional.flatMap()
の定義は次のとおりです.public <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
元のデータ型の場合、
java
は、flatMapToInt()
、flatMapToLong()
、およびflatMapToDouble()
のインターフェースを提供する.1.リストにおける
Stream.flatMap
の方法の使用ここには作家のリストがあります.どの作家にも本のリストがある.
Stream.flatMap()
を使用して、私たちはすべての作家からすべての本を手に入れます.そして私たちは一番高い本を見つけます.1.作家流の対象.{
{
"Mohan",
{
{
10,"AAA"}, {
20,"BBB"}
}
},
{
"Sohan",
{
{
30,"XXX"}, {
15,"ZZZ"}
}
}
}
2.
flatMap(writer -> writer.getBooks().stream())
の方法を使用した後、リストのフロー対象を得る.{
{
10,"AAA"},
{
20,"BBB"},
{
30,"XXX"},
{
15,"ZZZ"}
}
ここでの結果は
flatMap()
メソッドによって展開される.3.
max(new BookComparator())
の方法を使って、一番高い本を手に入れます.{
30,"XXX"}
コードを見てみましょう
FlatmapWithList.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class FlatmapWithList {
public static void main(String[] args) {
List<Book> books = Arrays.asList(new Book(10, "AAA"), new Book(20, "BBB"));
Writer w1 = new Writer("Mohan", books);
books = Arrays.asList(new Book(30, "XXX"), new Book(15, "ZZZ"));
Writer w2 = new Writer("Sohan", books);
List<Writer> writers = Arrays.asList(w1, w2);
Book book = writers.stream().flatMap(writer -> writer.getBooks().stream())
.max(new BookComparator()).get();
System.out.println("Name:"+book.getName()+", Price:"+ book.getPrice() );
}
}
Writer.java
package com.concretepage;
import java.util.List;
public class Writer {
private String name;
private List<Book> books;
public Writer(String name, List<Book> books) {
this.name = name;
this.books = books;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
Book.java
package com.concretepage;
public class Book {
private int price;
private String name;
public Book(int price, String name) {
this.price = price;
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
BookComparator.java
package com.concretepage;
import java.util.Comparator;
public class BookComparator implements Comparator<Book> {
@Override
public int compare(Book b1, Book b2) {
if (b1.getPrice() > b2.getPrice()) {
return 1;
} else if (b1.getPrice() == b2.getPrice()) {
return 0;
} else {
return -1;
}
}
}
しゅつりょく
Name:XXX, Price:30
2.Listリストにおける
Stream.flatMap
メソッドの使用ここでは、リスト付き
flatMap
メソッドを使用する.各リストに図書のオブジェクトが含まれている2つのリストを作成しています.最後に、この2つのリストを3番目のリストに追加します.私たちはこの本を最低価格で買います.FlatmapWithListOfList.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class FlatmapWithListOfList {
public static void main(String[] args) {
List<Book> list1 = Arrays.asList(new Book(10, "AAA"), new Book(20, "BBB"));
List<Book> list2 = Arrays.asList(new Book(30, "XXX"), new Book(15, "ZZZ"));
List<List<Book>> finalList = Arrays.asList(list1, list2);
Book book = finalList.stream().flatMap(list -> list.stream()).min(new BookComparator()).get();
System.out.println("Name:"+book.getName()+", Price:"+ book.getPrice() );
}
}
しゅつりょく
Name:AAA, Price:10
3.Arrayにおける
Stream.flatMap
の方法の使用ここでは、配列付き
flatMap
を使用します.整数データで2 D配列を作成しています.最後に偶数を見つけます.1.配列サンプル{
{
1,2},{
3,4},{
5,6}}
2.
flatMap(row -> Arrays.stream(row))
方法使用後{
1,2,3,4,5,6}
3.
filter(num -> num%2 == 0)
方法使用後{
2,4,6}
具体的なコード例を見てみましょう
FlatMapWithArray.java
package com.concretepage;
import java.util.Arrays;
public class FlatMapWithArray {
public static void main(String[] args) {
Integer[][] data = {
{
1,2},{
3,4},{
5,6}};
Arrays.stream(data).flatMap(row -> Arrays.stream(row)).filter(num -> num%2 == 0).
forEach(System.out::println);
}
}
しゅつりょく
2
4
6
4.オブジェクト配列における
Stream.flatMap
メソッドの使用ここでは、オブジェクト配列を有する
flatMap
の例を示す.Writerの2 D配列を作成します.このクラスには、書籍のリストが含まれます.私たちは最高価格の本を見つけます.FlatMapWithArrayOfObject.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class FlatMapWithArrayOfObject {
public static void main(String[] args) {
List<Book> books = Arrays.asList(new Book(10, "AAA"), new Book(20, "BBB"));
Writer w1 = new Writer("Mohan", books);
books = Arrays.asList(new Book(30, "CCC"), new Book(15, "DDD"));
Writer w2 = new Writer("Sohan", books);
books = Arrays.asList(new Book(45, "EEE"), new Book(25, "FFF"));
Writer w3 = new Writer("Vikas", books);
books = Arrays.asList(new Book(5, "GGG"), new Book(15, "HHH"));
Writer w4 = new Writer("Ramesh", books);
Writer[][] writerArray = {
{
w1,w2},{
w3,w4}};
Book book = Arrays.stream(writerArray).flatMap(row -> Arrays.stream(row)).
flatMap(writer -> writer.getBooks().stream()).max(new BookComparator()).get();
System.out.println("Name:"+book.getName()+", Price:"+ book.getPrice() );
}
}
しゅつりょく
Name:EEE, Price:45
5.
Files.lines()
におけるStream.flatMap
の使用方法Files.lines()
がJava 8に導入されました.ファイルのすべてのローをストリームとして読み込みます.私たちの例では、いくつかの行を含むファイルがあります.すべての単語をリストに保存して印刷します.info.txt
My name is Mohan
Country is India
FlatMapWithFile.java
package com.concretepage;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class FlatMapWithFile {
public static void main(String[] args) {
Stream<String> lines = null;
try {
lines = Files.lines(Paths.get("D:/cp/info.txt"), StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
Stream<String> stream = lines.flatMap(line -> Stream.of(line.split(" +")));
List<String> words = new ArrayList<>();
stream.forEach(w->words.add(w));
words.forEach(w -> System.out.println(w));
}
}
しゅつりょく
My
name
is
Mohan
Country
is
India
6.
Optional flatMap
java8
にはOptional
が導入されている.その動作は、空でない値を維持できるコンテナに似ています.NullPointerException
を処理します.flatMap
は、値が存在する場合にのみ適用されます.例を探します.OptionalflatMap.java
package com.concretepage;
import java.util.Optional;
public class OptionalflatMap {
public static void main(String[] args) {
Optional<PrimeMinister> primeMinister = Optional.of(new PrimeMinister("Narendra Modi", 65));
Optional<Country> country = Optional.of(new Country(primeMinister));
Optional<Person> person = Optional.of(new Person(country));
String pmName= person.flatMap(Person::getCountry).flatMap(Country::getPrimeMinister)
.map(PrimeMinister::getName).orElse("None");
System.out.println(pmName);
}
}
Country.java
package com.concretepage;
import java.util.Optional;
public class Country {
Optional<PrimeMinister> primeMinister;
public Country(){
}
public Country(Optional<PrimeMinister> primeMinister){
this.primeMinister = primeMinister;
}
public Optional<PrimeMinister> getPrimeMinister() {
return primeMinister;
}
public void setPrimeMinister(Optional<PrimeMinister> primeMinister) {
this.primeMinister = primeMinister;
}
}
Person.java
package com.concretepage;
import java.util.Optional;
public class Person {
Optional<Country> country;
public Person(){
}
public Person(Optional<Country> country){
this.country = country;
}
public Optional<Country> getCountry() {
return country;
}
public void setCountry(Optional<Country> country) {
this.country = country;
}
}
しゅつりょく
Narendra Modi
コードのダウンロード
java-8-flatmap-example.zip
参考文献
【1】Java 8 flatMap Example