Văn chương mục lục
Thâm nhập lý giải Java 8 đích lưu thức API: Giản hóa đại mã, đề thăng hiệu suất
Java 8 dẫn nhập liễu Stream API, tha đề cung liễu nhất chủng tân đích trừu tượng, khả dĩ canh phương tiện địa đối tập hợp tiến hành thao tác hòa xử lý.
Tưởng thâm nhập liễu giải Stream lưu đích tiểu hỏa bạn khả dĩ khán khán ngã dĩ tiền đíchNguyên mã văn chương:
Nhất, lưu Stream
Stream API duẫn hứa ngã môn dĩ nhất chủng thanh minh tính đích phương thức xử lý sổ cư, chi trì hàm sổ thức biên trình phong cách.
String lưu chủ yếu đặc tính hòa dụng pháp:
- Sang kiến lưu:
- Tòng tập hợp sang kiến:Thông quá tập hợp đích
stream()
Phương pháp hoặcparallelStream()
Phương pháp lai sang kiến lưu. - Tòng sổ tổ sang kiến:Sử dụng
Arrays.stream(array)
Phương pháp. - Sử dụng tĩnh thái công hán phương pháp:Như
Stream.of()
,IntStream.range()
Đẳng.
- Tòng tập hợp sang kiến:Thông quá tập hợp đích
- Trung gian thao tác:
filter(Predicate)
:Căn cư điều kiện quá lự lưu trung đích nguyên tố.map(Function)
:Tương lưu trung đích mỗi cá nguyên tố ánh xạ vi lánh nhất cá nguyên tố.sorted()
:Đối lưu tiến hành bài tự.distinct()
:Khứ trừ lưu trung trọng phục đích nguyên tố.limit(long)
:Hạn chế lưu trung nguyên tố đích sổ lượng.
- Chung đoan thao tác:
forEach(Consumer)
:Đối lưu trung đích mỗi cá nguyên tố chấp hành thao tác.collect(Collectors)
:Tương lưu nguyên tố quy ước hòa hối tổng thành nhất cá trị, nhưList, Set, Map
Đẳng.reduce()
:Quy ước thao tác, khả dĩ tương lưu trung đích nguyên tố phản phục kết hợp khởi lai, đắc đáo nhất cá trị.min()
Hòamax()
:Trảo xuất lưu trung đích tối tiểu hòa tối đại trị.count()
:Phản hồi lưu trung nguyên tố đích tổng sổ.anyMatch()
,allMatch()
,noneMatch()
:Kiểm tra lưu trung thị phủ tồn tại mãn túc điều kiện đích nguyên tố.
Như hà sử dụng Java 8 đích Stream API lai thao tác tập hợp:
publicstaticvoidmain(String[]args){
List<String>strings=Arrays.asList("abc","","bc","efg","abcd","","jkl");
// đả ấn phi không tự phù xuyến đích sổ lượng: Sử dụng `filter` phương pháp quá lự xuất phi không tự phù xuyến, nhiên hậu sử dụng `count` phương pháp hoạch thủ sổ lượng
longcount=strings.stream()
.filter(string->!string.isEmpty())
.count();
System.out.println("Phi không tự phù xuyến sổ lượng:"+count);
// đả ấn phi không tự phù xuyến đích liệt biểu: Sử dụng `filter` phương pháp quá lự xuất phi không tự phù xuyến, nhiên hậu sử dụng `collect(Collectors.toList())` tương kết quả thu tập vi List
List<String>filtered=strings.stream()
.filter(string->!string.isEmpty())
.collect(Collectors.toList());
System.out.println("Phi không tự phù xuyến liệt biểu:"+filtered);
// sử dụng đậu hào liên tiếp phi không tự phù xuyến: Sử dụng `filter` phương pháp quá lự xuất phi không tự phù xuyến, nhiên hậu sử dụng `collect(Collectors.joining( "," ))` liên tiếp thành nhất cá tự phù xuyến
StringmergedString=strings.stream()
.filter(string->!string.isEmpty())
.collect(Collectors.joining(","));
System.out.println("Liên tiếp hậu đích tự phù xuyến:"+mergedString);
// hoạch thủ tối trường đích tự phù xuyến: Sử dụng `max` phương pháp trảo đáo tối trường đích tự phù xuyến, như quả trảo bất đáo tắc phản hồi không tự phù xuyến
StringlongestString=strings.stream()
.max((s1,s2)->s1.length()-s2.length())
.orElse("");
System.out.println("Tối trường đích tự phù xuyến:"+longestString);
}
Nhị, Int | Long | Double Stream
IntStream
,LongStream
HòaDoubleStream
Thị cơ bổn loại hình đích lưu, đề cung liễu đối chỉnh sổ, trường chỉnh sổ hòa song tinh độ phù điểm sổ đích cao hiệu xử lý.
IntStream
Đích nguyên tố loại hình viint
:
- Sang kiến phương thức:
range(int startInclusive, int endExclusive)
:Sang kiến nhất cá phạm vi tại[startInclusive, endExclusive)
Nội đíchIntStream
.rangeClosed(int startInclusive, int endInclusive)
:Sang kiến nhất cá phạm vi tại[startInclusive, endInclusive]
Nội đíchIntStream
.of(int... values)
:Tòng nhất tổ chỉnh sổ trị sang kiến nhất cáIntStream
.
- Thường dụng phương pháp:
sum()
:Đối lưu trung đích sở hữu chỉnh sổ cầu hòa.average()
:Kế toán lưu trung sở hữu chỉnh sổ đích bình quân trị.min()
Hòamax()
:Trảo xuất lưu trung đích tối tiểu hòa tối đại trị.forEach(IntConsumer action)
:Đối lưu trung đích mỗi cá chỉnh sổ chấp hành chỉ định thao tác.
LongStream
Đích nguyên tố loại hình vilong
:
- Sang kiến phương thức:
range(long startInclusive, long endExclusive)
:Sang kiến nhất cá phạm vi tại[startInclusive, endExclusive)
Nội đíchLongStream
.rangeClosed(long startInclusive, long endInclusive)
:Sang kiến nhất cá phạm vi tại[startInclusive, endInclusive]
Nội đíchLongStream
.of(long... values)
:Tòng nhất tổ trường chỉnh sổ trị sang kiến nhất cáLongStream
.
- Thường dụng phương pháp:
sum()
:Đối lưu trung đích sở hữu trường chỉnh sổ cầu hòa.average()
:Kế toán lưu trung sở hữu trường chỉnh sổ đích bình quân trị.min()
Hòamax()
:Trảo xuất lưu trung đích tối tiểu hòa tối đại trị.forEach(LongConsumer action)
:Đối lưu trung đích mỗi cá trường chỉnh sổ chấp hành chỉ định thao tác.
DoubleStream
Đích nguyên tố loại hình vidouble
:
- Sang kiến phương thức:
of(double... values)
:Tòng nhất tổ song tinh độ phù điểm sổ trị sang kiến nhất cáDoubleStream
.range(double startInclusive, double endInclusive)
:Sang kiến nhất cá tại chỉ định phạm vi nội đíchDoubleStream
.
- Thường dụng phương pháp:
sum()
:Đối lưu trung đích sở hữu song tinh độ phù điểm sổ cầu hòa.average()
:Kế toán lưu trung sở hữu song tinh độ phù điểm sổ đích bình quân trị.min()
Hòamax()
:Trảo xuất lưu trung đích tối tiểu hòa tối đại trị.forEach(DoubleConsumer action)
:Đối lưu trung đích mỗi cá song tinh độ phù điểm sổ chấp hành chỉ định thao tác.
Sử dụngIntStream
,LongStream
HòaDoubleStream
Cơ bổn đích thao tác:
publicstaticvoidmain(String[]args){
// IntStream
IntStream.range(1,5)
.forEach(System.out::print);
// thâu xuất: 1234
System.out.println();
intsum=IntStream.of(1,2,3,4,5)
.sum();
// kế toán tổng hòa: 15
System.out.println("Sum of integers:"+sum);
// LongStream
longmax=LongStream.rangeClosed(1,10)
.max()
.orElse(0);
// trảo xuất tối đại trị: 10
System.out.println("Max of long integers:"+max);
// DoubleStream
doubleaverage=DoubleStream.of(1.5,2.5,3.5,4.5)
.average()
.orElse(0.0);
// kế toán bình quân trị: 3.0
System.out.println("Average of doubles:"+average);
}
Tam, thu tập khí Collectors
Thu tập khí ( Collectors ) dụng vu tương lưu đích nguyên tố luy tích đáo tập hợp trung, hoặc giả tiến hành tụ hợp thao tác. Tại sử dụng lưu tiến hành sổ cư xử lý thời, thu tập khí thị phi thường hữu dụng đích công cụ, tha môn năng cú giản hóa đại mã tịnh đề cao hiệu suất.
Thường dụng đích thu tập khí cập kỳ dụng pháp:
toList()
- Tương lưu trung đích nguyên tố thu tập đáo nhất cá liệt biểu trung.
List<String>list=stream.collect(Collectors.toList());
toSet()
- Tương lưu trung đích nguyên tố thu tập đáo nhất cá tập hợp ( tập hợp nguyên tố bất trọng phục ) trung.
Set<String>set=stream.collect(Collectors.toSet());
toMap()
- Tương lưu trung đích nguyên tố căn cư chỉ định đích keyMapper hòa valueMapper chuyển hoán vi Map.
Map<Integer,String>map=stream.collect(Collectors.toMap(String::length,Function.identity()));
joining()
- Liên tiếp lưu trung đích nguyên tố thành vi nhất cá tự phù xuyến.
Stringresult=stream.collect(Collectors.joining(","));
groupingBy()
- Căn cư mỗ cá chúc tính đối lưu trung đích nguyên tố tiến hành phân tổ, sinh thành nhất cá Map, kiện vi chúc tính, trị vi đối ứng chúc tính đích nguyên tố liệt biểu.
Map<Integer,List<String>>groupedByLength=stream.collect(Collectors.groupingBy(String::length));
partitioningBy()
- Căn cư nhất cá điều kiện tương lưu trung đích nguyên tố phân vi lưỡng tổ, sinh thành nhất cá Map, kiện vi
true/false
,Trị vi mãn túc điều kiện đích nguyên tố liệt biểu.
Map<Boolean,List<String>>partitioned=stream.collect(Collectors.partitioningBy(s->s.length()>3));
- Căn cư nhất cá điều kiện tương lưu trung đích nguyên tố phân vi lưỡng tổ, sinh thành nhất cá Map, kiện vi
summarizingInt() / summarizingDouble() / summarizingLong()
- Thống kế lưu trung nguyên tố đích hối tổng tín tức, như tối đại trị, tối tiểu trị, bình quân trị, tổng hòa đẳng.
IntSummaryStatisticsstats=stream.collect(Collectors.summarizingInt(String::length));
Như hà tương nhất cá tự phù xuyến lưu thu tập thành nhất cá liệt biểu, tịnh án trường độ phân tổ:
publicstaticvoidmain(String[]args){
List<String>words=Arrays.asList("apple","banana","grape","pear","orange");
// tương lưu trung đích nguyên tố thu tập đáo nhất cá liệt biểu trung
List<String>wordList=words.stream()
.collect(Collectors.toList());
System.out.println("List of words:"+wordList);
// căn cư tự phù xuyến trường độ phân tổ
Map<Integer,List<String>>groupedByLength=words.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println("Words grouped by length:"+groupedByLength);
}
Trí giả đích mộng tái mỹ, dã bất như ngu nhân thật càn đích cước ấn