如何通过使用Java8 Stream从对象获取多个字段值来从List <object>创建HashSet?

时间:2018-10-22 04:28:06

标签: java java-8 java-stream

DataHistoryRecord类:

public class DataHistoryRecord {

Long dataCreatedBy;
Long dataModifiedBy;
getters & setters

}

我有List<DataHistoryRecord>,我想用唯一的HashSetdataCreatedBy ID从中创建dataModifiedBy

例如:如果列表具有以下两个记录:

DataHistoryRecord1,其中dataCreatedBy:1,dataModifiedBy:2

具有dataCreatedBy:1和dataModifiedBy:3的DataHistoryRecord2

输出HashSet应该具有三个值; 1,2,3

注意:请建议不使用foreach的方法

2 个答案:

答案 0 :(得分:5)

您可以这样做

Set<Long> uniqueValues = historyRecords.stream()
        .flatMap(hr -> Stream.of(hr.getCreatedBy(), hr.getModifiedBy()))
        .collect(Collectors.toSet());

答案 1 :(得分:1)

使用以下代码:

      Set<Long> collect = list
         .stream()
         .flatMap(record -> Stream.of(record.getCreatedBy(), record.getModifiedBy())
         .collect(Collectors.toSet());