1.如果返回2个或3个值,又懒得去定义bean,map,json之类的,那还有什么好办法呢?
答案是肯定有的。
2.代码
先引入maven依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
返回2个返回值的
MutablePair<String, String> mutablePair = MutablePair.of("1", "第二个值");
System.out.println(mutablePair.getLeft() + "," + mutablePair.getRight());
返回3个返回值结果
MutableTriple<Integer, String, Date> mutableTriple = MutableTriple.of(2, "中间值", new Date());
System.out.println(mutableTriple.getLeft() + "," + mutableTriple.getMiddle() + "," + mutableTriple.getRight());
BiMap
快速颠倒key/value 能通过key获取value,也能通过value获取key; 有一个限制就是唯一性;如果value不满足唯一性,就会报错;也可以强制复制 map.forcePut(key,value);这样做就没有太大的意义了
BiMap<String,String> britishToAmerican =
HashBiMap.create();
// Initialise and use just like a normal map
britishToAmerican.put("aubergine","egglant");
britishToAmerican.put("courgette","zucchini");
britishToAmerican.put("jam","jelly");
System.out.println(britishToAmerican.get
("aubergine")); // eggplant
BiMap<String,String> americanToBritish =
britishToAmerican.inverse();
System.out.println(americanToBritish.get("eggplant")); // aubergine
System.out.println(americanToBritish.get("zucchini")); // courgette
Multimap
Map<String,List<MyClass>> myClassListMap = new HashMap<String,List<MyClass>>()
简言之一个key,对应多个value的时候,可以用multimap替换
Multimap<String,Object> myMultimap = ArrayListMultimap.create();
Multimap<String, String> myMultimap = ArrayListMultimap.create();
Multimapget方法返回的是一个collection而不是list,这是因为前者会更加有用。如果你需要基于multimap直接操作list或者set,那么可以使用在定义类型的时候使用子类名称:ListMultimap,SetMultimap和SortedSetMultimap。例如:
ListMutlimap<String,String> myMutlimap = ArrayListMultimap.create();
List<string> myValues = myMutlimap.get("myKey"); // Returns a List, not a Collection.
例子
package com.test;
import java.util.Collection;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
public class MutliMapTest {
public static void main(String... args) {
Multimap<String, String> myMultimap = ArrayListMultimap.create();
// Adding some key/value
myMultimap.put("Fruits", "Bannana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");
myMultimap.put("binc", "binccccc");
// Getting the size
int size = myMultimap.size();
System.out.println(size); // 5 注意这个地方 是有点不太好玩的,如果能返回2的话,使用场景可能更多一些; 应该有别的解决办法(如果获取key集合之类的,再去个重) 下边这两个方法就很合适
System.out.println("---------------");
Map<String, Collection<String>> stringCollectionMap = myMultimap.asMap();
System.out.println(stringCollectionMap); //{binc=[binccccc], Vegetables=[Carrot], Fruits=[Bannana, Apple, Pear, Pear]}
System.out.println("1111111111111");
Set<String> keySet = myMultimap.keySet();
System.out.println(keySet); //[binc, Vegetables, Fruits]
//////////////////////
// Getting values
Collection<String> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear, Pear]
System.out.println(ImmutableSet.copyOf(fruits));// [Bannana, Apple, Pear]
// Set<Foo> set = Sets.newHashSet(list);
// Set<Foo> foo = new HashSet<Foo>(myList);
Collection<String> vegetables = myMultimap.get("Vegetables");
System.out.println(vegetables); // [Carrot]
// Iterating over entire Mutlimap
for (String value : myMultimap.values()) {
System.out.println(value);
}
// Removing a single value
myMultimap.remove("Fruits", "Pear");
System.out.println(myMultimap.get("Fruits")); // [Bannana, Apple, Pear]
// Remove all values for a key
myMultimap.removeAll("Fruits");
System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)
}
}