Java 8 map(),flatMap()示例
使用map()方法
編程時,很常見的是處理數據以便從對象集合中收集一些信息。
假設我們要從特定公司的所有員工中查找城市。 我們的員工班級如下。
public class Employee {private String name;private Integer age;private String city;private String state; private Department department;public String getCity() {return city;}public void setCity(String city) {this.city = city;} public String getState() {return state;}public void setState(String state) {this.state = state;} }我沒有包括Employee類的所有屬性,但是在這種情況下,我需要的是city屬性。
因此,現在,我們有了Employee對象的列表,需要找出不同的城市。 讓我們看看Java 8之前的方法。希望,您將編寫以下代碼來獲得不同的城市。
List<Employee> employeeList = ..... Set<String> cities = new HashSet<String>(); for (Employee emp : employeeList) {cities.add(emp.getCity()); }Java 8 Stream接口引入了map()方法,該方法以函數作為參數。 此函數應用于流中的每個元素并返回新流。 該代碼將如下所示。
List<Employee> employeeList = new ArrayList<Employee>(); List<String> cities = employeeList.stream().map(Employee::getCity).distinct().collect(Collectors.toList());使用flatMap()方法
Java 8 Stream接口引入了flatMap()方法,該方法可用于將幾個流合并或拼合為單個流。
讓我們舉個例子。 假設我們想過濾掉文本文件中的不同單詞。 查看以下文本文件。
Sri Lanka is a beautiful country in Indian ocean. It is totally surrounded by the sea.在Java 8中,我們可以使用一行讀取文本文件,它將返回字符串流。 流的每個元素將是文本文件的一行。
Stream<String> lineStream = Files.lines(Paths.get("data.txt"), Charset.defaultCharset());如果通過打印'lineStream'Stream看到上述代碼的輸出,則將是文本文件的行。
接下來,我們可以將上述流的每個元素轉換為單詞流。 然后,我們可以使用flatMap()方法將所有單詞流扁平化為單個Stream。 如果我們對lineStream Stream的每個元素執行以下代碼,我們將獲得兩個單詞流。 請參閱以下代碼。
line -> Arrays.stream(line.split(" "))兩個單詞流如下。
Stream 1 : [SriLanka][is][a][beautiful][country][in][Indian][ocean.]} Stream 2 : [It][is][totally][surrounded][by][the][sea.]flatMap()方法可以將這兩者平化為單個單詞流,如下所示。
Stream<String> wordStream = lineStream.flatMap(line -> Arrays.stream(line.split(" ")));如果打印上述wordStream的元素,它將是文本文件中的所有單詞。 但是,您仍然會看到重復的單詞。 您可以使用distinct()方法來避免重復。 這是最終代碼。
List<String> wordStream = lineStream.flatMap(line -> Arrays.stream(line.split(" "))).distinct().collect(Collectors.toList());如果仔細觀察,您只需在Java 8中使用兩行代碼即可找到文本文件的不同單詞。
翻譯自: https://www.javacodegeeks.com/2018/07/java-8-map-flatmap-examples.html
總結
以上是生活随笔為你收集整理的Java 8 map(),flatMap()示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓垂钓之王中文版(安卓垂钓之王)
- 下一篇: 快递备案号是什么(包裹备案号)