Ổi - Hướng dẫn nhanh
Ổi là gì?
Guava là một thư viện mã nguồn mở, dựa trên Java và chứa nhiều thư viện cốt lõi của Google, đang được sử dụng trong nhiều dự án của họ. Nó tạo điều kiện cho các phương pháp mã hóa tốt nhất và giúp giảm các lỗi mã hóa. Nó cung cấp các phương thức tiện ích cho bộ sưu tập, bộ nhớ đệm, hỗ trợ nguyên thủy, đồng thời, chú thích chung, xử lý chuỗi, I / O và xác nhận.
Lợi ích của Ổi
Standardized - Thư viện Guava được quản lý bởi Google.
Efficient - Đây là một phần mở rộng đáng tin cậy, nhanh chóng và hiệu quả cho thư viện chuẩn Java.
Optimized - Thư viện được tối ưu hóa cao.
Functional Programming - Nó bổ sung khả năng xử lý chức năng cho Java.
Utilities - Nó cung cấp nhiều lớp tiện ích thường xuyên được yêu cầu trong việc phát triển ứng dụng lập trình.
Validation - Nó cung cấp một cơ chế xác nhận an toàn dự phòng tiêu chuẩn.
Best Practices - Nó nhấn mạnh vào các phương pháp hay nhất.
Hãy xem xét đoạn mã sau.
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer a = null;
Integer b = new Integer(10);
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Integer a, Integer b) {
return a + b;
}
}
Chạy chương trình để nhận kết quả sau.
Exception in thread "main" java.lang.NullPointerException
at GuavaTester.sum(GuavaTester.java:13)
at GuavaTester.main(GuavaTester.java:9)
Sau đây là các vấn đề với mã.
sum () không quan tâm đến bất kỳ tham số nào được truyền dưới dạng null.
hàm người gọi cũng không lo lắng về việc vô tình truyền null cho phương thức sum ().
Khi chương trình chạy, NullPointerException xảy ra.
Để tránh các vấn đề trên, kiểm tra vô hiệu phải được thực hiện ở mỗi và mọi nơi có vấn đề như vậy.
Hãy xem việc sử dụng Tùy chọn, một lớp Tiện ích do Guava cung cấp, để giải quyết các vấn đề trên theo cách chuẩn hóa.
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer invalidInput = null;
Optional<Integer> a = Optional.of(invalidInput);
Optional<Integer> b = Optional.of(new Integer(10));
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
return a.get() + b.get();
}
}
Chạy chương trình để nhận kết quả sau.
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:210)
at com.google.common.base.Optional.of(Optional.java:85)
at GuavaTester.main(GuavaTester.java:8)
Chúng ta hãy hiểu các khái niệm quan trọng của chương trình trên.
Optional - Một lớp tiện ích, để làm cho mã sử dụng null đúng cách.
Optional.of- Nó trả về thể hiện của lớp Tùy chọn được sử dụng như một tham số. Nó kiểm tra giá trị được truyền, không được 'null'.
Optional.get - Nó nhận giá trị của đầu vào được lưu trữ trong lớp Tùy chọn.
Sử dụng lớp Tùy chọn, bạn có thể kiểm tra xem phương thức người gọi có truyền một tham số thích hợp hay không.
Thiết lập môi trường cục bộ
Nếu bạn vẫn sẵn sàng thiết lập môi trường của mình cho ngôn ngữ lập trình Java, thì phần này sẽ hướng dẫn bạn cách tải xuống và thiết lập Java trên máy của bạn. Vui lòng làm theo các bước được đề cập bên dưới để thiết lập môi trường.
Java SE có sẵn miễn phí từ liên kết Tải xuống Java . Vì vậy, bạn tải xuống một phiên bản dựa trên hệ điều hành của bạn.
Làm theo hướng dẫn để tải xuống Java và chạy .exeđể cài đặt Java trên máy của bạn. Khi bạn đã cài đặt Java trên máy của mình, bạn sẽ cần đặt các biến môi trường để trỏ đến các thư mục cài đặt chính xác -
Thiết lập đường dẫn cho Windows 2000 / XP
Chúng tôi giả định rằng bạn đã cài đặt Java trong thư mục c: \ Program Files \ java \ jdk -
Nhấp chuột phải vào 'Máy tính của tôi' và chọn 'Thuộc tính'.
Nhấp vào nút 'Biến môi trường' trong tab 'Nâng cao'.
Bây giờ, hãy thay đổi biến 'Đường dẫn' để nó cũng chứa đường dẫn đến tệp thực thi Java. Ví dụ, nếu đường dẫn hiện được đặt thành 'C: \ WINDOWS \ SYSTEM32', thì hãy thay đổi đường dẫn của bạn thành 'C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin'.
Thiết lập đường dẫn cho Windows 95/98 / ME
Chúng tôi giả định rằng bạn đã cài đặt Java trong thư mục c: \ Program Files \ java \ jdk -
Chỉnh sửa tệp 'C: \ autoexec.bat' và thêm dòng sau vào cuối - 'SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin'
Thiết lập đường dẫn cho Linux, UNIX, Solaris, FreeBSD
Biến môi trường PATH nên được đặt để trỏ đến nơi các tệp nhị phân Java đã được cài đặt. Tham khảo tài liệu shell của bạn nếu bạn gặp khó khăn khi thực hiện việc này.
Ví dụ: nếu bạn sử dụng bash làm trình bao, thì bạn sẽ thêm dòng sau vào cuối '.bashrc: export PATH = / path / to / java: $ PATH'
Trình chỉnh sửa Java phổ biến
Để viết các chương trình Java, bạn cần một trình soạn thảo văn bản. Có rất nhiều IDE tinh vi có sẵn trên thị trường. Nhưng hiện tại, bạn có thể xem xét một trong những điều sau:
Notepad - Trên máy Windows, bạn có thể sử dụng bất kỳ trình soạn thảo văn bản đơn giản nào như Notepad (Khuyến nghị cho hướng dẫn này), TextPad.
Netbeans - Đây là một IDE Java mã nguồn mở và miễn phí có thể được tải xuống từ https://www.netbeans.org/index.html.
Eclipse - Nó cũng là một IDE Java được phát triển bởi cộng đồng nguồn mở eclipse và có thể được tải xuống từ https://www.eclipse.org/.
Tải xuống Guava Archive
Tải xuống phiên bản mới nhất của tệp Guava jar từ ổi-18.0.jar . Tại thời điểm viết bài hướng dẫn này, chúng tôi đã tải xuống ổi-18.0.jar và sao chép nó vào thư mục C: \> Guava.
Hệ điều hành | Tên lưu trữ |
---|---|
các cửa sổ | ổi-18.0.jar |
Linux | ổi-18.0.jar |
Mac | ổi-18.0.jar |
Đặt môi trường ổi
Đặt Guava_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi lưu trữ Guava jar trên máy của bạn. Giả sử, chúng tôi đã giải nén ổi-18.0.jar trong thư mục Guava trên các Hệ điều hành khác nhau như sau.
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | Đặt biến môi trường Guava_HOME thành C: \ Guava |
Linux | xuất khẩu Guava_HOME = / usr / local / Guava |
Mac | export Guava_HOME = / Library / Guava |
Đặt biến CLASSPATH
Đặt CLASSPATHbiến môi trường để trỏ đến vị trí lọ Guava. Giả sử, bạn đã lưu trữ ổi-18.0.jar trong thư mục Guava trên các Hệ điều hành khác nhau như sau.
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | Đặt biến môi trường CLASSPATH thành% CLASSPATH%;% Guava_HOME% \ ổi-18.0.jar;.; |
Linux | xuất CLASSPATH = $ CLASSPATH: $ Guava_HOME / ổi-18.0.jar:. |
Mac | xuất CLASSPATH = $ CLASSPATH: $ Guava_HOME / ổi-18.0.jar:. |
Tùy chọn là một đối tượng bất biến được sử dụng để chứa một đối tượng không phải null. Đối tượng tùy chọn được sử dụng để biểu diễn null với giá trị không có. Lớp này có các phương thức tiện ích khác nhau để tạo điều kiện cho mã xử lý các giá trị có sẵn hoặc không có sẵn thay vì kiểm tra các giá trị null.
Khai báo lớp học
Sau đây là khai báo cho com.google.common.base.Optional<T> lớp học -
@GwtCompatible(serializable = true)
public abstract class Optional<T>
extends Object
implements Serializable
Phương pháp lớp học
Sr.No | Phương pháp & Mô tả |
---|---|
1 | static <T> Optional<T> absent() Trả về một cá thể Tùy chọn không có tham chiếu được chứa. |
2 | abstract Set<T> asSet() Trả về một Tập hợp singleton bất biến có phần tử duy nhất là thể hiện được chứa nếu nó có mặt; một bất biến rỗng Đặt ngược lại. |
3 | abstract boolean equals(Object object) Trả về true nếu đối tượng là một đối tượng Tùy chọn và hoặc các tham chiếu được chứa bằng nhau hoặc cả hai đều không có. |
4 | static <T> Optional<T> fromNullable(T nullableReference) Nếu nullableReference không phải null, trả về một thể hiện Tùy chọn chứa tham chiếu đó; ngược lại trả về vắng mặt (). |
5 | abstract T get() Trả về cá thể được chứa, phải có mặt. |
6 | abstract int hashCode() Trả về mã băm cho trường hợp này. |
7 | abstract boolean isPresent() Trả về true nếu chủ sở hữu này chứa thể hiện (không phải null). |
số 8 | static <T> Optional<T> of(T reference) Trả về một cá thể Tùy chọn chứa tham chiếu không rỗng đã cho. |
9 | abstract Optional<T> or(Optional<? extends T> secondChoice) Trả về tùy chọn này nếu nó có một giá trị hiện tại; thứ hai Chọn cách khác. |
10 | abstract T or(Supplier<? extends T> supplier) Trả về cá thể chứa nếu nó hiện diện; nhà cung cấp.get () ngược lại. |
11 | abstract T or(T defaultValue) Trả về cá thể chứa nếu nó hiện diện; defaultValue nếu không. |
12 | abstract T orNull() Trả về cá thể chứa nếu nó hiện diện; null nếu không. |
13 | static <T> Iterable<T> presentInstances(Iterable<? extends Optional<? extends T>> optionals) Trả về giá trị của mỗi phiên bản hiện tại từ các tùy chọn được cung cấp, theo thứ tự, bỏ qua các lần xuất hiện của hàm vắng mặt (). |
14 | abstract String toString() Trả về một biểu diễn chuỗi cho trường hợp này. |
15 | abstract <V> Optional<V> transform(Function<? super T,V> function) Nếu thể hiện có mặt, nó được chuyển đổi với Hàm đã cho; ngược lại, hàm vắng mặt () được trả về |
Phương thức được kế thừa
Lớp này kế thừa các phương thức từ lớp sau:
- java.lang.Object
Ví dụ về Lớp tùy chọn
Tạo chương trình java sau bằng bất kỳ trình soạn thảo nào bạn chọn C:/> Guava.
GuavaTester.java
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer value1 = null;
Integer value2 = new Integer(10);
//Optional.fromNullable - allows passed parameter to be null.
Optional<Integer> a = Optional.fromNullable(value1);
//Optional.of - throws NullPointerException if passed parameter is null
Optional<Integer> b = Optional.of(value2);
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
//Optional.isPresent - checks the value is present or not
System.out.println("First parameter is present: " + a.isPresent());
System.out.println("Second parameter is present: " + b.isPresent());
//Optional.or - returns the value if present otherwise returns
//the default value passed.
Integer value1 = a.or(new Integer(0));
//Optional.get - gets the value, value should be present
Integer value2 = b.get();
return value1 + value2;
}
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\Guava>javac GuavaTester.java
Bây giờ hãy chạy GuavaTester để xem kết quả.
C:\Guava>java GuavaTester
Xem kết quả.
First parameter is present: false
Second parameter is present: true
10
Điều kiện tiên quyết cung cấp các phương thức tĩnh để kiểm tra xem một phương thức hoặc một phương thức khởi tạo có được gọi với tham số thích hợp hay không. Nó kiểm tra các điều kiện trước. Các phương thức của nó khiến IllegalArgumentException bị lỗi.
Khai báo lớp học
Sau đây là khai báo cho com.google.common.base.Preconditions lớp học -
@GwtCompatible
public final class Preconditions
extends Object
Phương pháp lớp học
Sr.No | Phương pháp & Mô tả |
---|---|
1 | static void checkArgument(boolean expression) Đảm bảo tính trung thực của một biểu thức liên quan đến một hoặc nhiều tham số cho phương thức gọi. |
2 | static void checkArgument(boolean expression, Object errorMessage) Đảm bảo tính trung thực của một biểu thức liên quan đến một hoặc nhiều tham số cho phương thức gọi. |
3 | static void checkArgument(boolean expression, String errorMessageTemplate, Object. errorMessageArgs) Đảm bảo tính trung thực của một biểu thức liên quan đến một hoặc nhiều tham số cho phương thức gọi. |
4 | static int checkElementIndex(int index, int size) Đảm bảo rằng chỉ mục chỉ định một phần tử hợp lệ trong một mảng, danh sách hoặc một chuỗi có kích thước. |
5 | static int checkElementIndex(int index, int size, String desc) Đảm bảo rằng chỉ mục chỉ định một phần tử hợp lệ trong một mảng, danh sách hoặc một chuỗi có kích thước. |
6 | static <T> T checkNotNull(T reference) Đảm bảo rằng một tham chiếu đối tượng được truyền dưới dạng tham số cho phương thức gọi không phải là giá trị rỗng. |
7 | static <T> T checkNotNull(T reference, Object errorMessage) Đảm bảo rằng một tham chiếu đối tượng được truyền dưới dạng tham số cho phương thức gọi không phải là giá trị rỗng. |
số 8 | static <T> T checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs) Đảm bảo rằng một tham chiếu đối tượng được truyền dưới dạng tham số cho phương thức gọi không phải là giá trị rỗng. |
9 | static int checkPositionIndex(int index, int size) Đảm bảo rằng chỉ mục chỉ định một vị trí hợp lệ trong một mảng, danh sách hoặc một chuỗi có kích thước. |
10 | static int checkPositionIndex(int index, int size, String desc) Đảm bảo rằng chỉ mục chỉ định một vị trí hợp lệ trong một mảng, danh sách hoặc một chuỗi có kích thước. |
11 | static void checkPositionIndexes(int start, int end, int size) Đảm bảo rằng bắt đầu và kết thúc chỉ định một vị trí hợp lệ trong một mảng, danh sách hoặc một chuỗi có kích thước và theo thứ tự. |
12 | static void checkState(boolean expression) Đảm bảo tính trung thực của một biểu thức liên quan đến trạng thái của cá thể đang gọi, nhưng không liên quan đến bất kỳ tham số nào đối với phương thức gọi. |
13 | static void checkState(boolean expression, Object errorMessage) Đảm bảo tính trung thực của một biểu thức liên quan đến trạng thái của cá thể đang gọi, nhưng không liên quan đến bất kỳ tham số nào đối với phương thức gọi. |
14 | static void checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) Đảm bảo tính trung thực của một biểu thức liên quan đến trạng thái của cá thể đang gọi, nhưng không liên quan đến bất kỳ tham số nào đối với phương thức gọi. |
Phương thức được kế thừa
Lớp này kế thừa các phương thức từ lớp sau:
- java.lang.Object
Ví dụ về Lớp điều kiện tiên quyết
Tạo chương trình java sau bằng bất kỳ trình soạn thảo nào bạn chọn C:/> Guava.
GuavaTester.java
import com.google.common.base.Preconditions;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
try {
System.out.println(guavaTester.sqrt(-3.0));
} catch(IllegalArgumentException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.sum(null,3));
} catch(NullPointerException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.getValue(6));
} catch(IndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
}
public double sqrt(double input) throws IllegalArgumentException {
Preconditions.checkArgument(input > 0.0,
"Illegal Argument passed: Negative value %s.", input);
return Math.sqrt(input);
}
public int sum(Integer a, Integer b) {
a = Preconditions.checkNotNull(a, "Illegal Argument passed: First parameter is Null.");
b = Preconditions.checkNotNull(b, "Illegal Argument passed: Second parameter is Null.");
return a+b;
}
public int getValue(int input) {
int[] data = {1,2,3,4,5};
Preconditions.checkElementIndex(input,data.length, "Illegal Argument passed: Invalid index.");
return 0;
}
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\Guava>javac GuavaTester.java
Bây giờ hãy chạy GuavaTester để xem kết quả.
C:\Guava>java GuavaTester
Xem kết quả.
Illegal Argument passed: Negative value -3.0.
Illegal Argument passed: First parameter is Null.
Illegal Argument passed: Invalid index. (6) must be less than size (5)
Sắp xếp thứ tự có thể được coi là một bộ so sánh phong phú với chức năng chuỗi nâng cao, nhiều phương pháp tiện ích, khả năng phân loại nhiều loại, v.v.
Khai báo lớp học
Sau đây là khai báo cho com.google.common.collect.Ordering<T> lớp học -
@GwtCompatible
public abstract class Ordering<T>
extends Object
implements Comparator<T>
Phương pháp lớp học
Sr.No | Phương pháp & Mô tả |
---|---|
1 | static Ordering<Object> allEqual() Trả về một thứ tự coi tất cả các giá trị là bằng nhau, cho biết "không có thứ tự". Việc chuyển thứ tự này cho bất kỳ thuật toán sắp xếp ổn định nào sẽ không làm thay đổi thứ tự của các phần tử. |
2 | static Ordering<Object> arbitrary() Trả về một thứ tự bất kỳ trên tất cả các đối tượng, đối tượng mà so sánh (a, b) == 0 ngụ ý a == b (bình đẳng danh tính). |
3 | int binarySearch(List<? extends T> sortedList, T key) Tìm kiếm được sắp xếp Danh sách cho khóa bằng cách sử dụng thuật toán tìm kiếm nhị phân. |
4 | abstract int compare(T left, T right) So sánh hai đối số của nó cho thứ tự. |
5 | <U extends T> Ordering<U> compound(Comparator<? super U> secondaryComparator) Trả về một thứ tự đầu tiên sử dụng thứ tự này, nhưng trong trường hợp "buộc", sau đó sẽ ủy quyền cho Bộ so sánh phụ. |
6 | static <T> Ordering<T> compound(Iterable<? extends Comparator<? super T>> comparators) Trả về một thứ tự thử từng bộ so sánh đã cho theo thứ tự cho đến khi tìm thấy kết quả khác 0, trả về kết quả đó và chỉ trả về 0 nếu tất cả các bộ so sánh đều trả về 0. |
7 | static <T> Ordering<T> explicit(List<T> valuesInOrder) Trả về một thứ tự so sánh các đối tượng theo thứ tự mà chúng xuất hiện trong danh sách đã cho. |
số 8 | static <T> Ordering<T> explicit(T leastValue, T... remainingValuesInOrder) Trả về một thứ tự so sánh các đối tượng theo thứ tự mà chúng được cung cấp cho phương thức này. |
9 | static <T> Ordering<T> from(Comparator<T> comparator) Trả về một thứ tự dựa trên một phiên bản so sánh hiện có. |
10 | <E extends T> List<E> greatestOf(Iterable<E> iterable, int k) Trả về k phần tử lớn nhất của có thể lặp đã cho theo thứ tự này, theo thứ tự từ lớn nhất đến nhỏ nhất. |
11 | <E extends T> List<E> greatestOf(Iterator<E> iterator, int k) Trả về k phần tử lớn nhất từ trình lặp đã cho theo thứ tự này, theo thứ tự từ lớn nhất đến nhỏ nhất. |
12 | <E extends T> ImmutableList<E> immutableSortedCopy(Iterable<E> elements) Trả về một danh sách bất biến chứa các phần tử được sắp xếp theo thứ tự này. |
13 | boolean isOrdered(Iterable<? extends T> iterable) Trả về true nếu mỗi phần tử trong có thể lặp lại sau phần tử đầu tiên lớn hơn hoặc bằng phần tử đứng trước nó, theo thứ tự này. |
14 | boolean isStrictlyOrdered(Iterable<? extends T> iterable) Trả về true nếu mỗi phần tử trong có thể lặp lại sau phần tử đầu tiên lớn hơn phần tử đứng trước nó, theo thứ tự này |
15 | <E extends T> List<E> leastOf(Iterable<E> iterable, int k) Trả về k phần tử nhỏ nhất của có thể lặp lại đã cho theo thứ tự này, theo thứ tự từ nhỏ nhất đến lớn nhất. |
16 | <E extends T> List<E> leastOf(Iterator<E> elements, int k) Trả về k phần tử nhỏ nhất từ trình lặp đã cho theo thứ tự này, theo thứ tự từ nhỏ nhất đến lớn nhất. |
17 | <S extends T> Ordering<Iterable<S>> lexicographical() Trả về một thứ tự mới sắp xếp các thành phần lặp lại bằng cách so sánh các phần tử tương ứng theo từng cặp cho đến khi tìm thấy một kết quả khác; áp đặt "trật tự từ điển". |
18 | <E extends T> E max(E a, E b) Trả về giá trị lớn hơn trong hai giá trị theo thứ tự này. |
19 | <E extends T> E max(E a, E b, E c, E... rest) Trả về giá trị lớn nhất trong số các giá trị được chỉ định theo thứ tự này. |
20 | <E extends T> E max(Iterable<E> iterable) Trả về giá trị lớn nhất trong số các giá trị được chỉ định theo thứ tự này. |
21 | <E extends T> E max(Iterator<E> iterator) Trả về giá trị lớn nhất trong số các giá trị được chỉ định theo thứ tự này. |
22 | <E extends T> E min(E a, E b) Trả về giá trị nhỏ hơn trong hai giá trị theo thứ tự này. |
23 | <E extends T> E min(E a, E b, E c, E... rest) Trả về giá trị ít nhất trong số các giá trị được chỉ định theo thứ tự này. |
24 | <E extends T> E min(Iterable<E> iterable) Trả về giá trị ít nhất trong số các giá trị được chỉ định theo thứ tự này. |
25 | <E extends T> E min(Iterator<E> iterator) Trả về giá trị ít nhất trong số các giá trị được chỉ định theo thứ tự này. |
26 | static <C extends Comparable> Ordering<C> natural() Trả về thứ tự có thể tuần tự hóa sử dụng thứ tự tự nhiên của các giá trị. |
27 | <S extends T> Ordering<S> nullsFirst() Trả về một thứ tự coi null ít hơn tất cả các giá trị khác và sử dụng thứ tự này để so sánh các giá trị không phải null. |
28 | <S extends T> Ordering<S> nullsLast() Trả về một thứ tự coi null lớn hơn tất cả các giá trị khác và sử dụng thứ tự này để so sánh các giá trị không phải null. |
29 | <F> Ordering<F> onResultOf(Function<F,? extends T> function) Trả về một thứ tự mới trên F sắp xếp thứ tự các phần tử bằng cách áp dụng một hàm trước tiên cho chúng, sau đó so sánh các kết quả đó bằng cách sử dụng hàm này. |
30 | <S extends T> Ordering<S> reverse() Trả về mặt trái của thứ tự này; Đặt hàng tương đương với Collections.reverseOrder (Bộ so sánh). |
31 | <E extends T> List<E> sortedCopy(Iterable<E> elements) Trả về danh sách có thể thay đổi chứa các phần tử được sắp xếp theo thứ tự này; chỉ sử dụng điều này khi danh sách kết quả có thể cần sửa đổi thêm hoặc có thể chứa rỗng. |
32 | static Ordering<Object> usingToString() Trả về một thứ tự so sánh các đối tượng theo thứ tự tự nhiên của các biểu diễn chuỗi của chúng như được trả về bởi toString (). |
Phương thức được kế thừa
Lớp này kế thừa các phương thức từ lớp sau:
- java.lang.Object
Ví dụ về lớp đặt hàng
Tạo chương trình java sau bằng bất kỳ trình soạn thảo nào bạn chọn C:/> Guava.
GuavaTester.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.Ordering;
public class GuavaTester {
public static void main(String args[]) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(new Integer(5));
numbers.add(new Integer(2));
numbers.add(new Integer(15));
numbers.add(new Integer(51));
numbers.add(new Integer(53));
numbers.add(new Integer(35));
numbers.add(new Integer(45));
numbers.add(new Integer(32));
numbers.add(new Integer(43));
numbers.add(new Integer(16));
Ordering ordering = Ordering.natural();
System.out.println("Input List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering );
System.out.println("Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
System.out.println("List is sorted: " + ordering.isOrdered(numbers));
System.out.println("Minimum: " + ordering.min(numbers));
System.out.println("Maximum: " + ordering.max(numbers));
Collections.sort(numbers,ordering.reverse());
System.out.println("Reverse: " + numbers);
numbers.add(null);
System.out.println("Null added to Sorted List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering.nullsFirst());
System.out.println("Null first Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
List<String> names = new ArrayList<String>();
names.add("Ram");
names.add("Shyam");
names.add("Mohan");
names.add("Sohan");
names.add("Ramesh");
names.add("Suresh");
names.add("Naresh");
names.add("Mahesh");
names.add(null);
names.add("Vikas");
names.add("Deepak");
System.out.println("Another List: ");
System.out.println(names);
Collections.sort(names,ordering.nullsFirst().reverse());
System.out.println("Null first then reverse sorted list: ");
System.out.println(names);
}
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\Guava>javac GuavaTester.java
Bây giờ hãy chạy GuavaTester để xem kết quả.
C:\Guava>java GuavaTester
Xem kết quả.
Input List:
[5, 2, 15, 51, 53, 35, 45, 32, 43, 16]
Sorted List:
[2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
List is sorted: true
Minimum: 2
Maximum: 53
Reverse: [53, 51, 45, 43, 35, 32, 16, 15, 5, 2]
Null added to Sorted List:
[53, 51, 45, 43, 35, 32, 16, 15, 5, 2, null]
Null first Sorted List:
[null, 2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
Another List:
[Ram, Shyam, Mohan, Sohan, Ramesh, Suresh, Naresh, Mahesh, null, Vikas, Deepak]
Null first then reverse sorted list:
[Vikas, Suresh, Sohan, Shyam, Ramesh, Ram, Naresh, Mohan, Mahesh, Deepak, null]
Lớp đối tượng cung cấp các hàm trợ giúp áp dụng cho tất cả các đối tượng như bằng, Mã băm, v.v.
Khai báo lớp học
Sau đây là khai báo cho com.google.common.base.Objects lớp học -
@GwtCompatible
public final class Objects
extends Object
Phương pháp lớp học
Sr.No | Phương pháp & Mô tả |
---|---|
1 | static boolean equal(Object a, Object b) Xác định xem hai đối tượng có thể là rỗng có bằng nhau hay không. |
2 | static <T> T firstNonNull(T first, T second) Không được chấp nhận. Thay vào đó, hãy sử dụng MoreObjects.firstNonNull (T, T). Phương pháp này được lên lịch xóa vào tháng 6 năm 2016. |
3 | static int hashCode(Object... objects) Tạo mã băm cho nhiều giá trị. |
4 | static Objects.ToStringHelper toStringHelper(Class<?> clazz) Không được chấp nhận. Thay vào đó, hãy sử dụng MoreObjects.toStringHelper (Class). Phương pháp này được lên lịch xóa vào tháng 6 năm 2016 |
5 | static Objects.ToStringHelper toStringHelper(Object self) Không được chấp nhận. Sử dụng MoreObjects.toStringHelper (Đối tượng) để thay thế. Phương pháp này được lên lịch xóa vào tháng 6 năm 2016. |
6 | static Objects.ToStringHelper toStringHelper(String className) Không được chấp nhận. Thay vào đó, hãy sử dụng MoreObjects.toStringHelper (String). Phương pháp này được lên lịch xóa vào tháng 6 năm 2016. |
Phương thức được kế thừa
Lớp này kế thừa các phương thức từ lớp sau:
- java.lang.Object
Ví dụ về lớp đối tượng
Tạo chương trình java sau bằng bất kỳ trình soạn thảo nào bạn chọn C:/> Guava.
GuavaTester.java
import com.google.common.base.Objects;
public class GuavaTester {
public static void main(String args[]) {
Student s1 = new Student("Mahesh", "Parashar", 1, "VI");
Student s2 = new Student("Suresh", null, 3, null);
System.out.println(s1.equals(s2));
System.out.println(s1.hashCode());
System.out.println(
Objects.toStringHelper(s1)
.add("Name",s1.getFirstName()+" " + s1.getLastName())
.add("Class", s1.getClassName())
.add("Roll No", s1.getRollNo())
.toString());
}
}
class Student {
private String firstName;
private String lastName;
private int rollNo;
private String className;
public Student(String firstName, String lastName, int rollNo, String className) {
this.firstName = firstName;
this.lastName = lastName;
this.rollNo = rollNo;
this.className = className;
}
@Override
public boolean equals(Object object) {
if(!(object instanceof Student) || object == null) {
return false;
}
Student student = (Student)object;
// no need to handle null here
// Objects.equal("test", "test") == true
// Objects.equal("test", null) == false
// Objects.equal(null, "test") == false
// Objects.equal(null, null) == true
return Objects.equal(firstName, student.firstName) // first name can be null
&& Objects.equal(lastName, student.lastName) // last name can be null
&& Objects.equal(rollNo, student.rollNo)
&& Objects.equal(className, student.className); // class name can be null
}
@Override
public int hashCode() {
//no need to compute hashCode by self
return Objects.hashCode(className,rollNo);
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\Guava>javac GuavaTester.java
Bây giờ hãy chạy GuavaTester để xem kết quả.
C:\Guava>java GuavaTester
Xem kết quả.
false
85871
Student{Name=Mahesh Parashar, Class=VI, Roll No=1}
Phạm vi đại diện cho một khoảng hoặc một chuỗi. Nó được sử dụng để lấy một tập hợp các số / chuỗi nằm trong một phạm vi cụ thể.
Khai báo lớp học
Sau đây là khai báo cho com.google.common.collect.Range<C> lớp học -
@GwtCompatible
public final class Range<C extends Comparable>
extends Object
implements Predicate<C>, Serializable
Phương pháp
Sr.No | Phương pháp & Mô tả |
---|---|
1 | static <C extends Comparable<?>> Range<C> all() Trả về một dải ô chứa mọi giá trị thuộc loại C. |
2 | boolean apply(C input)Deprecated. Được cung cấp chỉ để đáp ứng giao diện Predicate; sử dụng chứa (C) để thay thế. |
3 | static <C extends Comparable<?>> Range<C> atLeast(C endpoint) Trả về một dải ô chứa tất cả các giá trị lớn hơn hoặc bằng điểm cuối. |
4 | static <C extends Comparable<?>> Range<C> atMost(C endpoint) Trả về một dải ô chứa tất cả các giá trị nhỏ hơn hoặc bằng điểm cuối. |
5 | Range<C> canonical(DiscreteDomain<C> domain) Trả về dạng chuẩn của phạm vi này trong miền đã cho. |
6 | static <C extends Comparable<?>> Range<C> closed(C lower, C upper) Trả về một dải ô chứa tất cả các giá trị lớn hơn hoặc bằng giá trị thấp hơn và nhỏ hơn hoặc bằng giá trị trên. |
7 | static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper) Trả về một dải ô chứa tất cả các giá trị lớn hơn hoặc bằng giá trị thấp hơn và nhỏ hơn giá trị trên. |
số 8 | boolean contains(C value) Trả về true nếu giá trị nằm trong giới hạn của phạm vi này. |
9 | boolean containsAll(Iterable<? extends C> values) Trả về true nếu mọi phần tử trong các giá trị đều nằm trong phạm vi này. |
10 | static <C extends Comparable<?>> Range<C> downTo(C endpoint, BoundType boundType) Trả về một phạm vi từ điểm cuối đã cho, có thể bao gồm (đóng) hoặc loại trừ (mở), không có giới hạn trên. |
11 | static <C extends Comparable<?>> Range<C> encloseAll(Iterable<C> values) Trả về phạm vi tối thiểu chứa tất cả các giá trị đã cho. |
12 | boolean encloses(Range<C> other) Trả về true nếu các giới hạn của khác không mở rộng ra ngoài giới hạn của phạm vi này. |
13 | boolean equals(Object object) Trả về true nếu đối tượng là một phạm vi có cùng điểm cuối và các loại liên kết với phạm vi này. |
14 | static <C extends Comparable<?>> Range<C> greaterThan(C endpoint) Trả về một phạm vi chứa tất cả các giá trị lớn hơn điểm cuối. |
15 | int hashCode() Trả về mã băm cho phạm vi này. |
16 | boolean hasLowerBound() Trả về true nếu phạm vi này có điểm cuối thấp hơn. |
17 | boolean hasUpperBound() Trả về true nếu phạm vi này có điểm cuối trên. |
18 | Range<C> intersection(Range<C> connectedRange) Trả về phạm vi lớn nhất được bao bởi cả phạm vi này và phạm vi kết nối, nếu phạm vi như vậy tồn tại. |
19 | boolean isConnected(Range<C> other) Trả về true nếu tồn tại một phạm vi (có thể trống) được bao bởi cả phạm vi này và phạm vi khác. |
20 | boolean isEmpty() Trả về true nếu phạm vi này có dạng [v..v) hoặc (v..v]. |
21 | static <C extends Comparable<?>> Range<C> lessThan(C endpoint) Trả về một dải ô chứa tất cả các giá trị nhỏ hơn điểm cuối. |
22 | BoundType lowerBoundType() Trả về loại giới hạn dưới của phạm vi này: BoundType.CLOSED nếu phạm vi bao gồm điểm cuối thấp hơn của nó, BoundType.OPEN nếu không. |
23 | C lowerEndpoint() Trả về điểm cuối thấp hơn của dải ô này. |
24 | static <C extends Comparable<?>> Range<C> open(C lower, C upper) Trả về một dải ô chứa tất cả các giá trị lớn hơn giá trị thấp hơn và nhỏ hơn giá trị trên. |
25 | static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper) Trả về một dải ô chứa tất cả các giá trị lớn hơn giá trị thấp hơn và nhỏ hơn hoặc bằng giá trị trên. |
26 | static <C extends Comparable<?>> Range<C> range(C lower, BoundType lowerType, C upper, BoundType upperType) Trả về một phạm vi có chứa bất kỳ giá trị nào từ dưới lên trên, trong đó mỗi điểm cuối có thể bao gồm (đóng) hoặc riêng (mở). |
27 | static <C extends Comparable<?>> Range<C> singleton(C value) Trả về một phạm vi chỉ chứa giá trị đã cho. |
28 | Range<C> span(Range<C> other) Trả về phạm vi tối thiểu bao gồm cả phạm vi này và phạm vi khác. |
29 | String toString() Trả về biểu diễn chuỗi của phạm vi này, chẳng hạn như "[3..5)" (các ví dụ khác được liệt kê trong tài liệu lớp). |
30 | BoundType upperBoundType() Trả về kiểu giới hạn trên của phạm vi này: BoundType.CLOSED nếu phạm vi bao gồm điểm cuối trên của nó, BoundType.OPEN nếu không. |
31 | C upperEndpoint() Trả về điểm cuối trên của dải ô này. |
32 | static <C extends Comparable<?>> Range<C> upTo(C endpoint, BoundType boundType) Trả về một dải ô không có giới hạn dưới lên đến điểm cuối đã cho, có thể bao gồm (đóng) hoặc loại trừ (mở). |
Phương thức được kế thừa
Lớp này kế thừa các phương thức từ lớp sau:
- java.lang.Object
Ví dụ về lớp phạm vi
Tạo chương trình java sau bằng bất kỳ trình soạn thảo nào bạn chọn C:/> Guava.
GuavaTester.java
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Range;
import com.google.common.primitives.Ints;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
tester.testRange();
}
private void testRange() {
//create a range [a,b] = { x | a <= x <= b}
Range<Integer> range1 = Range.closed(0, 9);
System.out.print("[0,9] : ");
printRange(range1);
System.out.println("5 is present: " + range1.contains(5));
System.out.println("(1,2,3) is present: " + range1.containsAll(Ints.asList(1, 2, 3)));
System.out.println("Lower Bound: " + range1.lowerEndpoint());
System.out.println("Upper Bound: " + range1.upperEndpoint());
//create a range (a,b) = { x | a < x < b}
Range<Integer> range2 = Range.open(0, 9);
System.out.print("(0,9) : ");
printRange(range2);
//create a range (a,b] = { x | a < x <= b}
Range<Integer> range3 = Range.openClosed(0, 9);
System.out.print("(0,9] : ");
printRange(range3);
//create a range [a,b) = { x | a <= x < b}
Range<Integer> range4 = Range.closedOpen(0, 9);
System.out.print("[0,9) : ");
printRange(range4);
//create an open ended range (9, infinity
Range<Integer> range5 = Range.greaterThan(9);
System.out.println("(9,infinity) : ");
System.out.println("Lower Bound: " + range5.lowerEndpoint());
System.out.println("Upper Bound present: " + range5.hasUpperBound());
Range<Integer> range6 = Range.closed(3, 5);
printRange(range6);
//check a subrange [3,5] in [0,9]
System.out.println("[0,9] encloses [3,5]:" + range1.encloses(range6));
Range<Integer> range7 = Range.closed(9, 20);
printRange(range7);
//check ranges to be connected
System.out.println("[0,9] is connected [9,20]:" + range1.isConnected(range7));
Range<Integer> range8 = Range.closed(5, 15);
//intersection
printRange(range1.intersection(range8));
//span
printRange(range1.span(range8));
}
private void printRange(Range<Integer> range) {
System.out.print("[ ");
for(int grade : ContiguousSet.create(range, DiscreteDomain.integers())) {
System.out.print(grade +" ");
}
System.out.println("]");
}
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\Guava>javac GuavaTester.java
Bây giờ hãy chạy GuavaTester để xem kết quả.
C:\Guava>java GuavaTester
Xem kết quả.
[0,9] : [ 0 1 2 3 4 5 6 7 8 9 ]
5 is present: true
(1,2,3) is present: true
Lower Bound: 0
Upper Bound: 9
(0,9) : [ 1 2 3 4 5 6 7 8 ]
(0,9] : [ 1 2 3 4 5 6 7 8 9 ]
[0,9) : [ 0 1 2 3 4 5 6 7 8 ]
(9,infinity) :
Lower Bound: 9
Upper Bound present: false
[ 3 4 5 ]
[0,9] encloses [3,5]:true
[ 9 10 11 12 13 14 15 16 17 18 19 20 ]
[0,9] is connected [9,20]:true
[ 5 6 7 8 9 ]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]
Lớp Throwables cung cấp các phương thức tiện ích liên quan đến giao diện Throwable.
Khai báo lớp học
Sau đây là khai báo cho com.google.common.base.Throwables lớp học -
public final class Throwables
extends Object
Phương pháp lớp học
Sr.No | Phương pháp & Mô tả |
---|---|
1 | static List<Throwable> getCausalChain(Throwable throwable) Nhận chuỗi nguyên nhân có thể ném dưới dạng danh sách. |
2 | static Throwable getRootCause(Throwable throwable) Trả về nguyên nhân sâu xa nhất của việc ném được. |
3 | static String getStackTraceAsString(Throwable throwable) Trả về một chuỗi chứa kết quả của toString (), theo sau là dấu vết ngăn xếp đệ quy, đầy đủ của có thể ném. |
4 | static RuntimeException propagate(Throwable throwable) Tuyên truyền nguyên trạng có thể ném được nếu nó là một thể hiện của RuntimeException hoặc Error, hoặc nếu là phương sách cuối cùng, hãy kết thúc nó trong một RuntimeException sau đó lan truyền. |
5 | static <X extends Throwable> void propagateIfInstanceOf(Throwable throwable, Class<X> declaredType) Tuyên truyền có thể ném chính xác như hiện tại, nếu và chỉ khi nó là một thể hiện của statementType. |
6 | static void propagateIfPossible(Throwable throwable) Tuyên truyền có thể ném chính xác như hiện có, nếu và chỉ khi nó là một phiên bản của RuntimeException hoặc Error. |
7 | static <X extends Throwable> void propagateIfPossible(Throwable throwable, Class<X> declaredType) Tuyên truyền có thể ném chính xác như hiện tại, nếu và chỉ khi nó là một phiên bản của RuntimeException, Error, hoặc secureType. |
số 8 | static <X1 extends Throwable,X2 extends Throwable>void propagateIfPossible(Throwable throwable, Class<X1> declaredType1, Class<X2> declaredType2) Tuyên truyền có thể ném chính xác như hiện tại, nếu và chỉ khi nó là một thể hiện của RuntimeException, Error, Tuyên bốType1 hoặc Tuyên bốType2. |
Phương thức được kế thừa
Lớp này kế thừa các phương thức từ lớp sau:
- java.lang.Object
Ví dụ về lớp ném
Tạo chương trình java sau bằng bất kỳ trình soạn thảo nào bạn chọn C:/> Guava.
GuavaTester.java
import java.io.IOException;
import com.google.common.base.Objects;
import com.google.common.base.Throwables;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
try {
tester.showcaseThrowables();
} catch (InvalidInputException e) {
//get the root cause
System.out.println(Throwables.getRootCause(e));
} catch (Exception e) {
//get the stack trace in string format
System.out.println(Throwables.getStackTraceAsString(e));
}
try {
tester.showcaseThrowables1();
} catch (Exception e) {
System.out.println(Throwables.getStackTraceAsString(e));
}
}
public void showcaseThrowables() throws InvalidInputException {
try {
sqrt(-3.0);
} catch (Throwable e) {
//check the type of exception and throw it
Throwables.propagateIfInstanceOf(e, InvalidInputException.class);
Throwables.propagate(e);
}
}
public void showcaseThrowables1() {
try {
int[] data = {1,2,3};
getValue(data, 4);
} catch (Throwable e) {
Throwables.propagateIfInstanceOf(e, IndexOutOfBoundsException.class);
Throwables.propagate(e);
}
}
public double sqrt(double input) throws InvalidInputException {
if(input < 0) throw new InvalidInputException();
return Math.sqrt(input);
}
public double getValue(int[] list, int index) throws IndexOutOfBoundsException {
return list[index];
}
public void dummyIO() throws IOException {
throw new IOException();
}
}
class InvalidInputException extends Exception {
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\Guava>javac GuavaTester.java
Bây giờ hãy chạy GuavaTester để xem kết quả.
C:\Guava>java GuavaTester
Xem kết quả.
InvalidInputException
java.lang.ArrayIndexOutOfBoundsException: 4
at GuavaTester.getValue(GuavaTester.java:52)
at GuavaTester.showcaseThrowables1(GuavaTester.java:38)
at GuavaTester.main(GuavaTester.java:19)
Guava giới thiệu nhiều bộ sưu tập nâng cao dựa trên kinh nghiệm của các nhà phát triển trong các công trình phát triển ứng dụng. Dưới đây là danh sách các bộ sưu tập hữu ích -
Sr.No | Tên và mô tả bộ sưu tập |
---|---|
1 | Multiset Một phần mở rộng để Đặt giao diện để cho phép các phần tử trùng lặp. |
2 | Multimap Một phần mở rộng cho giao diện Bản đồ để các khóa của nó có thể được ánh xạ tới nhiều giá trị cùng một lúc. |
3 | BiMap Một phần mở rộng cho giao diện Bản đồ để hỗ trợ các hoạt động nghịch đảo. |
4 | Bàn Bảng đại diện cho một bản đồ đặc biệt trong đó hai khóa có thể được chỉ định theo kiểu kết hợp để tham chiếu đến một giá trị duy nhất. |
Ổi cung cấp một cơ chế bộ nhớ đệm dựa trên bộ nhớ rất mạnh mẽ bởi một giao diện LoadingCache <K, V>. Các giá trị được tải tự động trong bộ nhớ đệm và nó cung cấp nhiều phương thức tiện ích hữu ích cho nhu cầu bộ nhớ đệm.
Khai báo giao diện
Sau đây là khai báo cho com.google.common.cache.LoadingCache<K,V> giao diện -
@Beta
@GwtCompatible
public interface LoadingCache<K,V>
extends Cache<K,V>, Function<K,V>
Phương thức giao diện
Sr.No | Phương pháp & Mô tả |
---|---|
1 | V apply(K key) Không được chấp nhận. Cung cấp để đáp ứng giao diện Chức năng; thay vào đó sử dụng get (K) hoặc getUnchecked (K). |
2 | ConcurrentMap<K,V> asMap() Trả về chế độ xem các mục nhập được lưu trữ trong bộ đệm ẩn này dưới dạng bản đồ an toàn luồng. |
3 | V get(K key) Trả về giá trị được liên kết với khóa trong bộ nhớ cache này, trước tiên hãy tải giá trị đó nếu cần. |
4 | ImmutableMap<K,V> getAll(Iterable<? extends K> keys) Trả về bản đồ các giá trị được liên kết với các khóa, tạo hoặc truy xuất các giá trị đó nếu cần. |
5 | V getUnchecked(K key) Trả về giá trị được liên kết với khóa trong bộ nhớ cache này, trước tiên hãy tải giá trị đó nếu cần. |
6 | void refresh(K key) Tải giá trị mới cho khóa, có thể không đồng bộ. |
Ví dụ về LoadingCache
Tạo chương trình java sau bằng bất kỳ trình soạn thảo nào bạn chọn C:/> Guava.
GuavaTester.java
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import com.google.common.base.MoreObjects;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
public class GuavaTester {
public static void main(String args[]) {
//create a cache for employees based on their employee id
LoadingCache<String, Employee> employeeCache =
CacheBuilder.newBuilder()
.maximumSize(100) // maximum 100 records can be cached
.expireAfterAccess(30, TimeUnit.MINUTES) // cache will expire after 30 minutes of access
.build(new CacheLoader<String, Employee>() { // build the cacheloader
@Override
public Employee load(String empId) throws Exception {
//make the expensive call
return getFromDatabase(empId);
}
});
try {
//on first invocation, cache will be populated with corresponding
//employee record
System.out.println("Invocation #1");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
//second invocation, data will be returned from cache
System.out.println("Invocation #2");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private static Employee getFromDatabase(String empId) {
Employee e1 = new Employee("Mahesh", "Finance", "100");
Employee e2 = new Employee("Rohan", "IT", "103");
Employee e3 = new Employee("Sohan", "Admin", "110");
Map<String, Employee> database = new HashMap<String, Employee>();
database.put("100", e1);
database.put("103", e2);
database.put("110", e3);
System.out.println("Database hit for" + empId);
return database.get(empId);
}
}
class Employee {
String name;
String dept;
String emplD;
public Employee(String name, String dept, String empID) {
this.name = name;
this.dept = dept;
this.emplD = empID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getEmplD() {
return emplD;
}
public void setEmplD(String emplD) {
this.emplD = emplD;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(Employee.class)
.add("Name", name)
.add("Department", dept)
.add("Emp Id", emplD).toString();
}
}
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\Guava>javac GuavaTester.java
Bây giờ hãy chạy GuavaTester để xem kết quả.
C:\Guava>java GuavaTester
Xem kết quả.
Invocation #1
Database hit for100
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Database hit for103
Employee{Name=Rohan, Department=IT, Emp Id=103}
Database hit for110
Employee{Name=Sohan, Department=Admin, Emp Id=110}
Invocation #2
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Employee{Name=Rohan, Department=IT, Emp Id=103}
Employee{Name=Sohan, Department=Admin, Emp Id=110}
Guava giới thiệu nhiều tiện ích chuỗi nâng cao dựa trên kinh nghiệm của các nhà phát triển trong các công trình phát triển ứng dụng. Sau đây là danh sách các tiện ích dựa trên chuỗi hữu ích:
Sr.No | Tên và mô tả tiện ích |
---|---|
1 | Người tham gia Tiện ích nối các đối tượng, chuỗi, v.v. |
2 | Bộ chia Tiện ích chia nhỏ chuỗi. |
3 | CharMatcher Tiện ích cho các thao tác ký tự. |
4 | CaseFormat Tiện ích để thay đổi định dạng chuỗi. |
Vì các kiểu nguyên thủy của Java không thể được sử dụng để truyền vào generic hoặc trong bộ sưu tập làm đầu vào, Guava đã cung cấp rất nhiều lớp Wrapper Utilities để xử lý các kiểu nguyên thủy dưới dạng Đối tượng. Sau đây là danh sách các tiện ích xử lý nguyên thủy hữu ích:
Sr.No | Tên và mô tả tiện ích |
---|---|
1 | Byte Tiện ích cho byte nguyên thủy. |
2 | Quần short Tiện ích cho ngắn nguyên thủy. |
3 | Ints Tiện ích cho int nguyên thủy. |
4 | Longs Tiện ích cho lâu dài nguyên thủy. |
5 | Phao nổi Tiện ích cho float nguyên thủy. |
6 | Đôi Tiện ích cho nhân đôi nguyên thủy. |
7 | Ký tự Tiện ích cho char nguyên thủy. |
số 8 | Booleans Tiện ích cho boolean nguyên thủy. |
Guava cung cấp các lớp Tiện ích liên quan đến Toán học để xử lý int, long và BigInteger. Sau đây là danh sách các tiện ích hữu ích -
Sr.No | Tên và mô tả tiện ích |
---|---|
1 | IntMath Tiện ích toán học cho int. |
2 | LongMath Tiện ích toán học lâu dài. |
3 | BigIntegerMath Tiện ích toán học cho BigInteger. |