Java中各种数据结构如何使用stream流
1. List
假设你有一个List<String>
,你可以使用Stream来过滤、映射、排序等。
List<String> list = Arrays.asList("apple", "banana", "cherry", "date");
// 过滤操作
List<String> filteredList = list.stream()
.filter(s -> s.startsWith("a"))
.collect(Collectors.toList());
// 映射操作
List<Integer> lengths = list.stream()
.map(String::length)
.collect(Collectors.toList());
// 排序操作
List<String> sortedList = list.stream()
.sorted()
.collect(Collectors.toList());
2. Set
虽然Set
不保证元素的顺序,但你可以使用Stream API对其中的元素进行操作。
Set<String> set = new HashSet<>(Arrays.asList("apple", "banana", "cherry"));
// 过滤并收集为List
List<String> filteredList = set.stream()
.filter(s -> s.startsWith("a"))
.collect(Collectors.toList());
// 查找最长字符串
Optional<String> longestString = set.stream()
.max(Comparator.comparing(String::length));
3. Map
对于Map
,你可以对流中的键(keys)、值(values)或键值对(entries)进行操作。
Map<String, Integer> map = new HashMap<>();
map.put("apple", 100);
map.put("banana", 200);
map.put("cherry", 150);
// 对值进行操作,查找最大值
Optional<Integer> maxValue = map.values().stream()
.max(Integer::compareTo);
// 对键值对进行操作
// 获取value大于100的key列表
List<String> keysWithValuesOver100 = map.entrySet().stream()
.filter(e -> e.getValue() > 100)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
4. Array
数组也可以通过Stream API来处理,但需要先将其转换为流。
String[] array = {"apple", "banana", "cherry"};
// 转换为流,然后进行操作
List<String> filteredList = Arrays.stream(array)
.filter(s -> s.startsWith("a"))
.collect(Collectors.toList());