java8 stream流的常用操作


stream流的常用操作

1.數據准備:

構建list

public static List<User> list() {
        List<User> list = new ArrayList<>();
        list.add(new User("孫悟空", 12));
        list.add(new User("豬八戒", 23));
        list.add(new User("沙僧", 22));
        list.add(new User("唐僧", 45));
        return list;
    }

2.stream操作

1.list轉map

//屬性映射屬性
Map<String, Integer> map = list().stream().collect(Collectors.toMap(User::getName, User::getAge));
//屬性映射實體
Map<String, User> map1 = list().stream().collect(Collectors.toMap(User::getName, Function.identity()));

2.map轉list

//map中所有的value轉換為list
List<User> list = new ArrayList<>(map1.values());              

3.提取list中實體的某個字段,生成一個新的list

 List<String> list1 = list.stream().map(User::getName).collect(Collectors.toList());      

4.過濾list

List<User> list2 = list().stream().filter(user -> user.getName().contains("孫")).collect(Collectors.toList());       

5.分頁

long offset = 0; 
long limit = 1; 
List<User> list3 = list().stream().skip(offset).limit(limit).collect(Collectors.toList());              

6.聚合

int sum = list().stream().mapToInt(User::getAge).sum(); 
int max = list().stream().mapToInt(User::getAge).max().getAsInt(); 
int min = list().stream().mapToInt(User::getAge).min().getAsInt();
double average = list().stream().mapToDouble(User::getAge).average().getAsDouble();              

7.逗號字符串轉list

String s = "12345,232434,      54354534 "; 
//轉為 List<String>
List<String> list4 = Arrays.asList(s.split(","));
//轉為 List<Long>              
List<Long> collect = Arrays.asList(s.split(",")).stream().map(o -> Long.parseLong(o.trim())).collect(Collectors.toList()); 

8.將list轉為逗號字符串

//list轉逗號字符串
List<String> strs = new ArrayList<>(); 
strs.add("孫悟空"); strs.add("豬八戒"); strs.add("唐僧"); strs.add("沙僧");
String collect1 = strs.stream().map(String::valueOf).collect(Collectors.joining(","));  



String collect = list().stream().map(User::getName).collect(Collectors.joining(","));

排序:

//倒序並把null值排到最后
list.stream().sorted(Comparator.comparing(User::getNum, Comparator.nullsFirst(Double::compareTo)).reversed())        .collect(Collectors.toList());          

分組

Map<String, List<WorkAreaTreeVO>> map = treeVOS.stream().collect(Collectors.groupingBy(WorkAreaTreeVO::getAttrValue));
			

根據多個字段去重

list = list.stream().collect(Collectors.collectingAndThen(
                Collectors.toCollection(() -> new TreeSet<>(
                        Comparator.comparing(p->p.getName1() + ";" + p.getName2()))), ArrayList::new));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM