我有List<MyDTO>
。它具有projName,projID,projReleaseDate,comments
等属性。我想创建一个新的列表对象List<Timestamp>
,其中我必须存储所有projReleaseDates而不重复。
我开始尝试如下代码,但无法继续...
List<Timestamp> datesList = new ArrayList<Timestamp>();
List<MyDTO> myDTOList = getInformation();
for(MyDTO dtoList : myDTOList){
//dtoList.getProjReleaseDate(); //return the release date
}
如何将projReleaseDates存储在新的List对象(datesList
)中而不重复。我如何知道当前对象值和先前对象值是否相同?
答案 0 :(得分:1)
没有。不要带List
。拿一个Set
来消除欺骗。
Set<Timestamp> datesList = new HashSet<Timestamp>();
List<MyDTO> myDTOList = getInformation();
for(MyDTO dtoList : myDTOList){
datesList.add(dtoList.getProjReleaseDate());
}
答案 1 :(得分:0)
你应该使用Set
,它可以使用stream在Java 8中以单行完成,
Set<Timestamp> results = myDTOList
.stream()
.map(MyDTO::getProjReleaseDate)
.collect(Collectors.toSet());
答案 2 :(得分:0)
正如您所注意到的,List
类允许重复。 Set
(documentation)课程却没有,它非常适合您的愿望。
请注意,您丢失了套装中的订单。如果您需要维护订单,可以使用TreeSet
LinkedHashSet
(SortedSet)(针对特定订单)或// Create set
Set<Timestamp> dates = new HashSet<>();
List<MyDTO> myDTOList = getInformation();
for (MyDTO dtoList : myDTOList) {
Timestamp ts = dtoList.getProjReleaseDate();
// Add to set
dates.add(ts);
}
(documentation)(用于插入)顺序)。
您的代码可能如下所示:
Set<Timestamp> dates = getInformation().stream() // Stream<MyDTO>
.map(MyDTO::getProjReleaseDate) // Stream<Timestamp>
.collect(Collectors.toSet()); // Set<Timestamp>
或者,通过使用流API(自Java 8起):
/dissertation/* https://wjakethompson-dissertation.netlify.com/:splat 200
答案 3 :(得分:0)
如果您想省略重复项也维护广告订单顺序,可以使用LinkedHashSet
,确保已正确覆盖equals
和hashCode
方法
Set<Timestamp> results = myDTOList
.stream()
.map(MyDTO::getProjReleaseDate)
.filter(Objects::nonNull)
.collect(LinkedHashSet::new, Set::add, Set::addAll);
使用List
流与distinct()
[效率低于Set
]
List<Timestamp> result = myDTOList
.stream()
.map(MyDTO::getProjReleaseDate)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());