//1. 得到集合中对象的某个属性的集合
list.stream().map(CheckRecord::getId).collect(Collectors.toList());
//2. 根据groupId分组, 得到map(key: groupId, value: 对应的list集合)
Map<String, List<Student>> collectbyGroupId =
list.stream().collect(Collectors.groupingBy(Stutent::getGroupId));
//2.1.根据groupId分组, 得到map(key: groupId, value: 对应的对象)
list.stream().collect(Collectors.toMap(SysCompany::getName, Function.identity(), (key1 , key2) -> key2));
//2.2. 根据groupId分组
Map<Long, Student> map = list.stream().collect(Collectors.toMap(Student::getId, v -> v));
//3. 筛选得到符合条件的对象集合(这里得到的是分数>=90的学生对象集合)
List<Student> collections =
list.stream().filter(record -> record.getGrade() >= 90)
.collect(Collectors.toList());
//4.得到集合中按某一属性比较的最大的对象
Student maxStudent =
list.stream().collect(Collectors.maxBy(Comparator.comparing(Student::getGrade)))
.get();
//5.找到一个!=1 && !=2的返回true, 没找到返回false
Boolean hasFlag = list.stream().anyMatch(record -> record.getTemplateId()!=1 && record.getTemplateId()!=2);
//5.1 集合中所有对象的status是否都为3, 是返回true, 否则返回false
boolean flag = list.stream().allMatch(record-> record.getStatus() == 3);
//6.多条件排序(从小到大,注:需要返回结果才有用,list1和list2不是同一个集合)
List<CheckRecord> list1 = list2.stream().sorted(Comparator.comparing(CheckRecord::getResultNo)
.thenComparing(CheckRecord::getTemplateId)
.thenComparing(CheckRecord::getCreateTime))
.collect(Collectors.toList());
//6.1
Collections.sort(checkRecordList, new Comparator<CheckRecord>(){
@Override
public int compare(CheckRecord checkRecord1, CheckRecord checkRecord2) {
Long resultNo1 = Long.parseLong(checkRecord1.getResultNo());
Long resultNo2 = Long.parseLong(checkRecord2.getResultNo());
Integer templateId1 = checkRecord1.getTemplateId();
Integer templateId2 = checkRecord2.getTemplateId();
Date createTime1 = checkRecord1.getCreateTime();
Date createTime2 = checkRecord2.getCreateTime();
return (resultNo1 > resultNo2) ? 1 : ((resultNo1 < resultNo2) ? -1 :
((templateId1 > templateId2) ? 1 : ((templateId1 < templateId2) ? -1 :
((createTime1.after(createTime2) ? 1 : ((createTime1.before(createTime2) ? -1 : 0)))))));
}
});
//7.timeStrlist (String类型) 去重后用","分隔开
String str = timeStrlist.stream().distinct().collect(Collectors.joining(","));
//字符串","隔开转List<Integer>
String ids = "1,2,3,4,5,6";
List<Long> idList = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList());
//list转数组
Integer[] integers = Stream.of(1, 2, 3, 4, 5).toArray(Integer[]::new);
// 假设 list1 和 list2 中有相同数量的对象
List<Item> list1 = new ArrayList<>();
List<Item> list2 = new ArrayList<>();
// 使用 Stream 将 list2 的 ID 赋值给 list1 的 CID
List<Item> resultList = IntStream.range(0, list1.size())
.mapToObj(i -> {
Item item1 = list1.get(i);
Item item2 = list2.get(i);
item1.setCid(item2.getId());
return item1;
}).collect(Collectors.toList());
java8 新特性之stream用法
于 2019-04-25 13:39:15 首次发布