java專案中流式表示式的使用

溪源的奇思妙想發表於2020-06-02

流式表示式流式表示式是jdk8帶來的java的新特性詳情: https://www.cnblogs.com/aiqiqi/p/11004208.htmlhttps://blog.csdn.net/weixin_37948888/article/details/96995312
在這裡插入圖片描述

流式表示式的常見使用的場景

//1列出班上超過85分的學生姓名,並按照分數降序輸出使用者名稱字@Test
public void test1() {
    List<String> studentList = stuList.stream()
            .filter(x->x.getScore()>85)
            .sorted(Comparator.comparing(Student::getScore).reversed())
            .map(Student::getName)
            .collect(Collectors.toList());
    System.out.println(studentList);
}

建立流的方式
* 通過陣列建立
* 通過集合建立
* 建立空的流
* 建立無限流(通過limit可以實現限制大小)
* 建立規律的無限流

普通流和並行流
並行流 就是把一個內容分成多個資料塊,並用不同的執行緒分別處理每個資料塊的流(其背後是Fork/Join框架)
Stream API可以宣告性地通過parallel()與sequential()在並行流與順序流之間進行切換。

List<String> strs = Arrays.asList("11212","dfd","2323","dfhgf");
//建立普通流
Stream<String> stream  = strs.stream();
//建立並行流(即多個執行緒處理)
Stream<String> stream1 = strs.parallelStream();

在專案中經常使用的場景

//解決key值一對多的問題
Map<String, String> mmapCodeDeptName = mapAllDeptNameCode.stream().collect(Collectors.toMap( AllDeptNameCodePojo::getDeptCode,AllDeptNameCodePojo::getDeptName,(k,v)->v));

//解決 value可能為空的情況
Map<String, String> mmapCodeParentId = mapAllDeptNameCode.stream().collect(Collector.of(HashMap::new, (m, per)->m.put(per.getDeptCode(),per.getParentId()), (k, v)->v, Collector.Characteristics.IDENTITY_FINISH));

//擷取(場景:分批次處理集合 相當於 List.subList())
add.stream().skip(i * 1000).limit(1000).collect(Collectors.toList())

在這裡插入圖片描述

相關文章