Java是一門非常流行和廣泛使用的編程語言,它的一個重要的數據結構是List。在JDK8中,List有了許多新特性和方法。在本文中,我們將對這些新特性進行詳細的介紹和闡述,讓讀者能夠更好地掌握JDK8List。
一、去重
在很多情況下,我們需要從一個List中去除重複的元素。在JDK8之前,我們可以通過利用Set的特點來實現去重。但是在JDK8中,我們可以使用以下兩種方式輕鬆地實現List去重:
1. 利用stream和distinct方法
List list = Arrays.asList("A", "B", "A", "C", "B", "D"); List distinctList = list.stream().distinct().collect(Collectors.toList());
這裡我們首先將List轉化成Stream,然後使用distinct()方法去除重複元素,最後轉換為List。
2. 利用LinkedHashSet實現去重
List list = Arrays.asList("A", "B", "A", "C", "B", "D"); List distinctList = new ArrayList(new LinkedHashSet(list));
這裡我們創建一個LinkedHashSet來存儲原有List中的元素,LinkedHashSet會自動去除重複元素。最後將其轉化為List即可。
二、過濾
有時候,我們需要過濾掉某些元素。在JDK8中,我們可以使用filter()方法來實現過濾:
List list = Arrays.asList("A", "B", "A", "C", "B", "D"); List filteredList = list.stream().filter(s -> !s.equals("B")).collect(Collectors.toList());
在上面的例子中,我們使用了Lambda表達式來過濾掉所有等於”B”的元素,最後實現了過濾的功能。
三、新特性
JDK8為List添加了一些新特性,如forEach()、replaceAll()等方法,這裡我們就簡單介紹幾個新特性:
1. forEach()
List list = Arrays.asList("A", "B", "C", "D"); list.forEach(System.out::println);
在這個例子中,我們使用forEach()方法直接列印出了List中的所有元素。
2. replaceAll()
List list = Arrays.asList(1, 2, 3, 4); list.replaceAll(i -> i * 2); System.out.println(list);
在這個例子中,我們使用replaceAll()方法將List中的所有元素都乘以2。
四、分組
有時候,我們需要將List中的元素按照某種規則進行分組。在JDK8中,我們可以使用Collectors.groupingBy()方法來實現分組:
List list = Arrays.asList( new Person("Tom", "Male", 30), new Person("Jerry", "Male", 20), new Person("Lucy", "Female", 25), new Person("Mary", "Female", 35) ); Map<String, List> groupedMap = list.stream().collect(Collectors.groupingBy(Person::getGender));
在這個例子中,我們將Person對象按照性別分組,得到一個Map,其中key為性別,value為對應性別下的所有Person對象。
五、排序
在JDK8中,我們可以使用sort()方法對List進行排序。下面是一個簡單的例子:
List list = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3); list.sort(Comparator.naturalOrder());
在這裡,我們使用自然順序對List進行排序。
六、轉map
在JDK8中,我們可以使用Collectors.toMap()方法將List轉化為Map,這在很多場景下非常有用。下面是一個簡單的例子:
List list = Arrays.asList( new Person("Tom", "Male", 30), new Person("Jerry", "Male", 20), new Person("Lucy", "Female", 25), new Person("Mary", "Female", 35) ); Map map = list.stream().collect(Collectors.toMap(Person::getName, p -> p));
在這個例子中,我們將Person對象按照名稱轉化為Map。
七、List Map去重
在大多數場景中,我們經常需要根據某一欄位去重。在JDK8中,我們可以使用Collectors.toMap()方法結合mergeFunction()方法來實現Map去重。下面是一個簡單的例子:
List list = Arrays.asList( new Person("Tom", "Male", 30), new Person("Jerry", "Male", 20), new Person("Lucy", "Female", 25), new Person("Mary", "Female", 35), new Person("Mary", "Female", 30) ); Map map = list.stream().collect(Collectors.toMap(Person::getName, p -> p, (p1, p2) -> { if (p1.getAge() > p2.getAge()) { return p1; } else { return p2; } }));
在這個例子中,我們將Person對象按照名稱轉化為Map,並且當出現重複key時,選擇age較大的Person對象。
八、將List放到新集合
在JDK8中,我們可以使用Collectors.toList()方法將List放到新的集合中。下面是一個簡單的例子:
List list = Arrays.asList("A", "B", "C", "D"); List newList = list.stream().collect(Collectors.toList());
在這個例子中,我們將一個List放到新的List中。
九、將List轉換為Map把某個值當key選取
在JDK8中,我們可以使用Collectors.toMap()方法將List轉化為Map,並且將某個屬性作為key。下面是一個簡單的例子:
List list = Arrays.asList( new Person("Tom", "Male", 30), new Person("Jerry", "Male", 20), new Person("Lucy", "Female", 25), new Person("Mary", "Female", 35), new Person("Amy", "Female", 30) ); Map map = list.stream().collect(Collectors.toMap(Person::getAge, p -> p));
在這個例子中,我們將Person對象按照年齡轉化為Map。
總結
在本文中,我們詳細地介紹了JDK8List的各種新特性和方法。各種操作都有對應的代碼示例,代碼清晰易懂。相信讀者閱讀完本文後,將更加熟悉JDK8List,能夠更好地應用它來解決實際問題。
原創文章,作者:CIVA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144297.html