Java Lambda List 轉 Map


Java Lambda List 轉 Map  


 

在有些開發場景,需要對 List 對象列表進行過濾處理,並將有用的數據存放到Map中。

例如:告警對象,包含告警uuid(alarmUuid) 和 設備uuid(objUuid),需要對 objUuid = -1的告警進行過濾,並將過濾后告警數據的alarmUuid和 objUuid以鍵值對的形式保存到Map中。

 

1、告警對象定義如下:

/**
 * Created by Miracle Luna on 2020/3/16
 */
public class AlarmInfoResponse {
    private String alarmUuid;
    private String objUuid;

    public AlarmInfoResponse(String alarmUuid, String objUuid) {
        this.alarmUuid = alarmUuid;
        this.objUuid = objUuid;
    }

    public String getAlarmUuid() {
        return alarmUuid;
    }

    public void setAlarmUuid(String alarmUuid) {
        this.alarmUuid = alarmUuid;
    }

    public String getObjUuid() {
        return objUuid;
    }

    public void setObjUuid(String objUuid) {
        this.objUuid = objUuid;
    }

    @Override
    public String toString() {
        return "AlarmInfoResponse{" +
                "alarmUuid='" + alarmUuid + '\'' +
                ", objUuid='" + objUuid + '\'' +
                '}';
    }
}

 

2、過濾代碼如下:

/**
 * Created by Miracle Luna on 2020/3/16
 */
public class LambdaFilterListToMap {

    public static void main(String[] args) {
        List<AlarmInfoResponse> alarmInfoResponseList = new ArrayList<>();
        AlarmInfoResponse response0 = new AlarmInfoResponse("alarm0", "-1");
        AlarmInfoResponse response1 = new AlarmInfoResponse("alarm1", "1");
        AlarmInfoResponse response2 = new AlarmInfoResponse("alarm2", "2");
        AlarmInfoResponse response3 = new AlarmInfoResponse("alarm3", "3");
        alarmInfoResponseList.add(response0);
        alarmInfoResponseList.add(response1);
        alarmInfoResponseList.add(response2);
        alarmInfoResponseList.add(response3);

        // 方式1:先使用foreach遍歷(遍歷過程中條件判斷)
        Map<String, String> alarmObjUuidMap1 = new HashMap<>();
        alarmInfoResponseList.forEach(alarmInfoResponse -> {
            if(!"-1".equals(alarmInfoResponse.getObjUuid())) {
                alarmObjUuidMap1.put(alarmInfoResponse.getAlarmUuid(), alarmInfoResponse.getObjUuid());
            }
        });
        System.out.println("=============  方式1  ====================");
        alarmObjUuidMap1.forEach((alarmUuid, objUuid) -> System.out.println(alarmUuid + " : " + objUuid));


        // 方式2:使用流過濾,再使用foreach遍歷
        Map<String, String> alarmObjUuidMap2 = new HashMap<>();
        alarmInfoResponseList.stream().
        filter(alarmInfoResponse -> !"-1".equals(alarmInfoResponse.getObjUuid())).
        forEach(alarmInfoResponse -> alarmObjUuidMap2.put(alarmInfoResponse.getAlarmUuid(), alarmInfoResponse.getObjUuid()));
        System.out.println("\n=============  方式2  ====================");
        alarmObjUuidMap2.forEach((alarmUuid, objUuid) -> System.out.println(alarmUuid + " : " + objUuid));
    }
}

 

3、運行結果如下:

=============  方式1  ====================
alarm2 : 2
alarm1 : 1
alarm3 : 3

=============  方式2  ====================
alarm2 : 2
alarm1 : 1
alarm3 : 3

 


免責聲明!

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