• google的collection


    在google code上,google列出了它的几个核心项目,这些项目涉及到collections, caching, primitives support, concurrency libraries, common annotations, basic string processing, I/O等等方面。

    guava就是google在集合框架方面推出的扩展。

    目前只是粗略地研究了一下,总得来说,这套api提供的功能不像apache common collections那样全面,但是却轻便灵活,很多api可以带来语法糖一样的便捷性。

    看以下几个例子
    首先是io方面

    File file = new File(getClass().getResource("/test.txt").getFile()); 
        List<String> lines = null
        try
            lines = Files.readLines(file, Charsets.UTF_8); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        
     
    &#30452;&#25509;&#30465;&#21435;&#20102;new FileReader(),&#24456;&#26041;&#20415;

    再看看这个

    FileInputStream in = null;
           try {
            in = new FileInputStream("/data/test.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally{
            Closeables.closeQuietly(in);
        }
    &#30452;&#25509;&#30465;&#21435;&#20102;try catch&#22359;

    还可以把多个io数据源整合成一个

    List<InputSupplier<? extends Reader>> list = new ArrayList<InputSupplier<? extends Reader>>();
             
        InputSupplier<? extends Reader> is1 = new InputSupplier<FileReader>(){
            @Override
            public FileReader getInput() throws IOException {
                return new FileReader("/data/f1");
            }
        };
        InputSupplier<? extends Reader> is2 = new InputSupplier<FileReader>(){
            @Override
            public FileReader getInput() throws IOException {
                return new FileReader("/data/f2");
            }
        };
        list.add(is1);
        list.add(is2);
        MultiReader reader = new MultiReader(list.iterator());
        char[] buffer = new char[1024];
        reader.read(buffer,0,100);
    &#36825;&#19979;&#23601;&#21487;&#20197;&#20174;&#22810;&#20010;io&#28304;&#20013;&#35835;&#25968;&#25454;&#20102;

    对基本类型的操作也提供了。当然这部分功能commons也有,但是guava的api更方便。

    int[] array = { 1, 2, 3, 4, 5 }; 
           int a = 4
           boolean contains = Ints.contains(array, a); 
           int indexOf = Ints.indexOf(array, a); 
           int max = Ints.max(array); 
           int min = Ints.min(array); 
           int[] concat = Ints.concat(array, array2);
    &#30452;&#25509;&#25226;&#25968;&#32452;&#25340;&#25509;&#12290;

    当然还有最重头的,对collection的扩展

    List<String> list = new ArrayList<String>(); 
           list.add("a"); 
           list.add("b"); 
           list.add("c"); 
           list.add("d");
    &#21487;&#20197;&#36825;&#26679;&#20889;
           ImmutableList<String> of = ImmutableList.of("a", "b", "c", "d");
     
    map&#20063;&#19968;&#26679
           Map<String,String> map = new Hasm<String,String>();
           map.put("key1","value1");
           map.put("key2","value2");
    &#21487;&#20197;&#20195;&#26367;
           ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");

    还有一些特别可爱的语法糖

    Map<String,Map<String,? extends Reader>> map = Maps.newHashMap();
    Map<String,Map<String,? extends Reader>> map = Maps.newTreeMap();
     
    List<? extends Reader> list = Lists.newArrayList();
    List<? extends Reader> list = Lists.newLinkedList();
     
    &#30452;&#25509;&#30465;&#30053;&#20102;&#35752;&#21388;&#30340;&#27867;&#24418;&#23450;&#20041;&#12290;&#24456;&#26041;&#20415;&#65292;&#20854;&#23454;&#36825;&#20010;&#21407;&#29702;&#24456;&#31616;&#21333;&#65292;
     
           public static <K, V> HashMap<K, V> newHashMap() {
            return new HashMap<K, V>();
           }
    &#24456;&#24120;&#35265;&#30340;&#35821;&#27861;&#12290;
    springjdbc&#37324;&#30340;rowmapper&#23601;&#26159;&#36825;&#20040;&#20256;&#36882;&#27867;&#24418;&#30340;&#12290;

    综合来说,guava是一套非常轻便的api,虽然不像commons collection那样大而全,但是使用guava可以写出很优美的代码,也不失为一种好的选择。对于我们来说,特别有意义的一点在于,这套api代码量很小,便于学习,能够较快地让人掌握java的一些特性。

    备注:
    使用guava需引入jsr-305的实现。

  • 相关阅读:
    【Tomcat】使用Eclipse发布项目时,项目启动路径错误。
    Unsupported major.minor version 52.0
    【转载】设置event.cancelBubble,使触发子元素的onclick不同时触发父元素的onclick
    【MG】测试
    【Tomcat】使用Eclipse运行Tomcat7源码
    【微信公众号】WeixinJSBridge.call('closeWindow')无效
    【微信公众号】使用a标签打开链接显示空白
    【JAVA】导出jar包时,Class files on classpath not found
    【JAVA】修改项目包名
    lesson3.1:java公平锁和非公平锁及读写锁
  • 原文地址:https://www.cnblogs.com/blogszixin/p/3291513.html
Copyright © 2020-2023  润新知