Java业务仔的常用操作
stream
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@Data
static class Course {
private Long number;
private LocalDateTime beginTime;
private List<Long> studentIds;
}
public void streamOperations(List<Course> courses) {
// 映射并去重
List<Long> courseNumbers = courses.stream()
.filter(Objects::nonNull)
.map(Course::getNumber)
.distinct()
.collect(Collectors.toList());
// 先按开始时间排序后按number排序
List<Course> sortedCourses = courses.stream()
.sorted(Comparator.comparing(Course::getBeginTime).thenComparing(Course::getNumber))
.collect(Collectors.toList());
// 根据number组成map, 如果有相同的number会抛异常
Map<Long, Course> num2Lesson1 = courses.stream().collect(Collectors.toMap(Course::getNumber, Function.identity()));
// 根据number组成map, 如果有相同的number会执行降级逻辑
Map<Long, Course> num2Lesson2 = courses.stream().collect(Collectors.toMap(Course::getNumber, Function.identity(), (v1, v2) -> v1));
// 根据number聚合
Map<Long, List<Course>> num2Lessons = courses.stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(Course::getNumber));
// 根据number聚合某个字段
Map<Long, List<LocalDateTime>> number2BeginTimes = courses.stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(Course::getNumber,
Collectors.mapping(Course::getBeginTime, Collectors.toList())));
// 根据number找到number下最大beginTime的Course
Map<Long, Optional<Course>> number2MaxBeginTimeCourse = courses.stream()
.filter(r -> Objects.nonNull(r.getBeginTime()))
.collect(Collectors.groupingBy(Course::getNumber, Collectors.maxBy(Comparator.comparing(Course::getBeginTime))));
// 获取course下所有的studentId
List<Long> allStudentIds = courses.stream()
.map(Course::getStudentIds)
.flatMap(Collection::stream)
.distinct()
.collect(Collectors.toList());
}
guava
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// <dependency>
// <groupId>com.google.guava</groupId>
// <artifactId>guava</artifactId>
// <version>33.2.0-jre</version>
// </dependency>
public void guavaOperations(List<Course> courses) {
// 分批处理
int batchSize = 100;
for (List<Course> partList : Lists.partition(courses, 100)) {
// partList是视图,不要做变更操作
// do your business logic
System.out.println(partList);
}
// new集合
List<Course> list = Lists.newArrayList();
List<Course> list2 = Lists.newArrayListWithCapacity(10);
List<Course> list3 = Lists.newArrayListWithExpectedSize(20);
Set<Course> set = Sets.newHashSet();
Map<Integer, Course> map = Maps.newHashMap();
// 范围
Range<Integer> range = Range.closed(1, 10); // [1,10]
Range<Integer> range2 = Range.closedOpen(1, 10); // [1,10)
Range<Integer> range3 = Range.open(1, 10); // (1,10)
Integer shouldBe1 = range.lowerEndpoint();
Integer shouldBe10 = range.upperEndpoint();
Range<Integer> intersection = range.intersection(range2);
}
commons
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// <dependency>
// <groupId>org.apache.commons</groupId>
// <artifactId>commons-collections4</artifactId>
// <version>4.4</version>
// </dependency>
// <dependency>
// <groupId>org.apache.commons</groupId>
// <artifactId>commons-lang3</artifactId>
// <version>3.14.0</version>
// </dependency>
public void commons(String str, List<Course> courses, Set<Course> set, Map<Long, Course> map){
boolean notEmpty = CollectionUtils.isNotEmpty(courses);
boolean notEmpty2 = CollectionUtils.isNotEmpty(set);
boolean notEmpty3 = MapUtils.isNotEmpty(map);
boolean notBlank = StringUtils.isNotBlank(str);
Pair<Long, Course> number2Course = Pair.of(1L, new Course());
Triple<Long, Long, Course> triple = Triple.of(1L, 2L, new Course());
}
This post is licensed under CC BY 4.0 by the author.