加入收藏 | 设为首页 | 会员中心 | 我要投稿 宿州站长网 (https://www.0557zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java9 集合工厂技巧

发布时间:2021-12-07 16:04:25 所属栏目:教程 来源:互联网
导读:使集合框架更便捷的工厂方法 JEP269中提议,为集合框架增添一些工厂方法,来使创建不可变集合类与含有少量元素的Map变得更加便捷。下文就为什么它们应运而生来展开详细的阐述。 集合框架增加工厂方法是必然的结果 Java饱受其语法臃肿的批评,比如,创建一个

static <K,V> Map<K,V>
   of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7    
static <K,V> Map<K,V>
   of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7,
      K k8, V v8)
static <K,V> Map<K,V>
   of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7,
      K k8, V v8, K k9, V v9)
static <K,V> Map<K,V>
   of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7,
      K k8, V v8, K k9, V v9, K k10, V v10)
static <K,V> Map<K,V>
   ofEntries(Map.Entry<? extends K,? extends V>... entries)
第一个方法创建了一个空的不可变的Map,接下来10个方法创建包含1-10和键值对的Map,尽管这些方法比较混乱,但它们避免了final类型的可变参方法产生的数组分配,初始化和垃圾回收开销,且支持任意大小的Map。
 
虽然Map的可变参数方法近似List和Set的,但是它的每个键值对必须被包装起来,下面这个方法可以方便地将包装键值对转换为Map标准键值对:
 
Map.Entry<K,V> entry(K k, V v)
下面是Map的ofEntries() 和entry()方法的示例:
 
import java.util.Map;
 
import static java.util.Map.entry;
 
public class MapDemo
{
   public static void main(String[] args)
   {
      Map<String, String> capCities =
         Map.ofEntries(entry("Manitoba", "Winnipeg"),
                       entry("Alberta", "Edmonton"));
      capCities.forEach((k, v) ->
                        System.out.printf("Key = %s, Value = %s%n", k, v));
      try
      {
         capCities.put("British Columbia", "Victoria");
      }
      catch (UnsupportedOperationException uoe)
      {
         System.err.println("unable to modify capCities map");
      }
   }
}
运行后输出:
 
Key = Alberta, Value = Edmonton
Key = Manitoba, Value = Winnipeg
unable to modify capCities map
注意,未来的JDK版本可能会让开发者指定值类型来减少包装键值对所带来的性能开销,从entry()方法可以看出,通过它返回一个新的实现自Map.Entry的具体引用类型,我想这是为了后面把潜在特性迁移到值类型中去设下的铺垫吧。

(编辑:宿州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章