標(biāo)準(zhǔn)Java庫沒有提供足夠的方法來操作其核心類失仁,Apache Commons Lang提供了這些額外的方法灌灾。
Apache Commons Lang為java提供了大量的幫助工具。lang API极景,特別是String操作方法圾浅、基本數(shù)值方法健民、對象反射狮荔、并發(fā)胎撇、創(chuàng)建和序列化以及System屬性。此外殖氏,它還包含對java.util.Date的基本增強晚树,以及一系列專門用于幫助構(gòu)建方法的實用工具,如hashCode雅采、toString和equals题涨。
-- 來自官方簡介http://commons.apache.org/proper/commons-lang/index.html
什么是元組?
元組(tuple)是關(guān)系數(shù)據(jù)庫中的基本概念总滩,關(guān)系是一張表,表中的每行(即數(shù)據(jù)庫中的每條記錄)就是一個元組巡雨,每列就是一個屬性闰渔。 在二維表里,元組也稱為行铐望。 -- 摘自百度百科
如果從日常開發(fā)中我們可能經(jīng)常遇到如下情形:我們寫了某個方法冈涧,這個發(fā)放希望返回最大值和最小值兩個值茂附,這個時候怎么做呢?封裝一個返回對象督弓?或者返回一個json對象或者list营曼,然后解析?這樣確實有點難看愚隧!
那么好在Commons Lang給我們提供了一個tuple元組相關(guān)數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)蒂阱,就可以幫助我們解決這種問題。
Commons Lang Tuple
tuple相關(guān)的類位于org.apache.commons.lang3.tuple下狂塘,整個元組從是否可變的維度上分為可變元組和不可變元組录煤;從元組元素數(shù)量的維度上分為二元組和三元組;然后兩兩組和荞胡,那么總共就有2x2種元組:可變二元組妈踊、不可變二元組、可變?nèi)M泪漂、不可變?nèi)M廊营。
先來看下元組整個類圖:
從類圖上我們大致可以看到整個類之間的關(guān)系,所有二元組的基類是Pair,而Pair是繼承自了Map.Entry萝勤;而三元組的基類是Triple露筒。接下來進(jìn)入實戰(zhàn)環(huán)節(jié)。
可變二元組 MutablePair
@Test
public void testMutablePair() {
MutablePair<String, Boolean> mutablePair = MutablePair.of("test1", true);
System.out.println("左值:" + mutablePair.getLeft() + " 右值:" + mutablePair.getRight());
mutablePair.setLeft("test2");
mutablePair.setRight(false);
System.out.println("左值:" + mutablePair.getLeft() + " 右值:" + mutablePair.getRight());
輸出:
左值:test1 右值:true
左值:test2 右值:false
}
不可變二元組 ImmutablePair
在不可變元組中纵刘,存儲值的屬性均被final修飾邀窃,因而不可變。
@Test
public void testImmutablePair() {
ImmutablePair<String, Boolean> immutablePair = ImmutablePair.of("test1", true);
System.out.println("左值:" + immutablePair.getLeft() + " 右值:" + immutablePair.getRight());
}
輸出:
左值:test1 右值:true
可變?nèi)M
@Test
public void testMutableTriple() {
MutableTriple<String, Boolean, Integer> mutableTriple = MutableTriple.of("test1", true, 1);
System.out.println(
"左值:" + mutableTriple.getLeft() + " 中間值:" + mutableTriple.getMiddle() + " 右值:" + mutableTriple.getRight());
mutableTriple.setLeft("test2");
mutableTriple.setMiddle(false);
mutableTriple.setRight(2);
System.out.println(
"左值:" + mutableTriple.getLeft() + " 中間值:" + mutableTriple.getMiddle() + " 右值:" + mutableTriple.getRight());
}
輸出:
左值:test1 中間值:true 右值:1
左值:test2 中間值:false 右值:2
不可變?nèi)M
不可變的原理同二元組假哎,通過final修飾屬性瞬捕。
@Test
public void testImmutableTriple() {
ImmutableTriple<String, Boolean, Integer> immutableTriple = ImmutableTriple.of("test1", true, 1);
System.out.println(
"左值:" + immutableTriple.getLeft() + " 中間值:" + immutableTriple.getMiddle() + " 右值:" + immutableTriple.getRight());
}
輸出:
左值:test1 中間值:true 右值:1