溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java8新特性Lambda表達(dá)式的一些復(fù)雜用法總結(jié)

發(fā)布時間:2020-09-06 04:31:40 來源:腳本之家 閱讀:136 作者:四號程序員 欄目:編程語言

簡介

lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡單的“函數(shù)式編程”。

它是一個匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對應(yīng)于其中的lambda抽象(lambda abstraction),是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。

本文將介紹關(guān)于Java8 Lambda表達(dá)式的一些復(fù)雜用法,分享出來供大家參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹:

復(fù)雜用法實例

傳入數(shù)組ids,在list<Obj>上操作,找出Obj中id想匹配的,并且按照id進(jìn)行collect成map(這里假設(shè)找出來的按照id不重復(fù))

@Override
public Map<Integer, MyObj> getOperationByShipmentIds(Collection<Integer> ids) {
 return storage
   .stream()
   .filter(op -> ids.contains(op.getId()))
   .collect(Collectors.toMap(MyObj::getId, Function.identity()));
}

接上面的,假設(shè)id可以重復(fù):

@Override
public Map<Integer, MyObj> getOperationByShipmentIds(Collection<Integer> ids) {
 return storage
   .stream()
   .filter(op -> ids.contains(op.getId()))
   .collect(Collectors.groupingBy(MyObj::getId));
}

對象列表某一列求和

list.values().stream().mapToInt(obj -> obj.getIntField()).sum();

多個list追加到同一個中

List<MyObject> list = services.stream()
        .flatMap(s -> s.getObjects().stream())
        .collect(Collectors.toList());

類似wordCount計數(shù)

import java.util.*;
import java.util.stream.*;
 
class Test {
 public static void main(String[] args) {
  List<String> list = new ArrayList<>();
 
  list.add("Hello");
  list.add("Hello");
  list.add("World");
 
  Map<String, Long> counted = list.stream()
   .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
 
  System.out.println(counted);
 }
}

使用Lambda實現(xiàn)分段chunk

AtomicInteger counter = new AtomicInteger();
 
stream.collect(groupingBy(x->counter.getAndIncrement()/chunkSize))
 .values()
 .forEach(database::flushChunk);

跑個題,上面的那個也可以用apache commons搞定

ListUtils.partition(list, batchSize)

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI