zoukankan      html  css  js  c++  java
  • List常用方法

    list.addAll

     list.addAll(list);// 向集合追加一个collection,只可追加collection,由于java不提供collection的实现,由它的下级接口来实现
     list.addAll(4, list);// 与上述含义相同, “4”意为追加元素所放的位置
    

    list.subList()

    list.subList(1,3)//返回下标从1到3的数据 ,包括左不包括右 即返回下标为1,2的数据
    

    list.indexOf()

    //在集合中查找元素 ,"a"如果有 ,返回所查找元素的下标,如果不存在则返回-1
      list.indexOf("a");
    

    list.clear()

     list.clear();// 调用clear方法清空集合中的所有数据
    

    list.equals(list2)

    //该方法去比较两个对象时,首先先去判断两个对象是否具有相同的地址,如果是同一个对象的引用,则直接放回true;如果地址不一样,
    //则证明不是引用同一个对象,接下来就是挨个去比较两个字符串对象的内容是否一致,完全相等返回true,否则false。
     list.equals(arr);//false
    

    list.isEmpty

    1. 有没有瓶子 list != null
    2. 瓶子里有没有水 list.isEmpty()
    3. 判断的时候一定要注意先后顺序 如果没有瓶子都没有,直接判断有没有水,是会报nullException的
    4. list.add(null)会造成list.isEmpty() 为false,但是list.size()为1, 所以代码里要避免list.add(null)的陷阱 。
    5. list==null,它其实是根本没有在堆内是不存在的,没有存储的地址。但是list.size()=0是已经存在地址,但是并没有存相应的元素,当元素的数量增加是,size随之变化。
    6. null说明了没有进行初始化,此时要是调用任何的方法的话都会抛出空指针异常,而list.size()==0表示此list已经new过,但是其中没有存入任何值。
    7. isEmpty先获取size的值在判断再返回,list.size则是直接返回属性size的值,相对isEmpty较快。看源码:
     public boolean isEmpty() {
         return size == 0;
     }
    

    例子:我有一个空着的水杯(list),而你没有,那你是null,我的size为0。你想装水需要去买个水杯(new ArrayList();),我就可以直接装水(list.add(水))。你要是没有杯子直接倒水,水就流出去啦(空指针异常)。所以用做判断的时候经常连用list!=null && list.size()!=0 。
    区别: 是否存在,存在的话是否存放元素。因此最先判断是否存在实物,再判断实物中是否存放东西。

    List定义时添加多条数据

     List<Integer> requiredCol = new ArrayList<Integer>() {{ add(1);add(2);add(3);add(4); }};
    

    list.remove(i)

    list.remove(i);//移除指定位置数据
    

    list.contains()

    contains方法的源码是用equals()比较的,也就是说比较的是地址,所以要在类中重写equals()方法.看代码如何实现的
     public boolean equals(Object obj) {
            if(this==obj)//地址相同
                return true;
            else if(obj!=null&&obj instanceof User) {
                User u=(User)obj;
                return this.name.equals(u.name)&&this.pswd.equals(u.pswd);
            }
            else
                return false;
        }
    

    list转数组

      //为了将List转为数组,JDK提供了toArray
            //实现方式一:
            String [] array=(String[]) list.toArray(new String[list.size()]);
            for(String arrays: array) {
                System.out.println(arrays);
            }
            //方式二:
            String [] arr=new String [list.size()];
            list.toArray(arr);
            for(String arrs: arr) {
                System.out.println(arrs);
            }
    

    检验List是否存在重复的元素

    //校验list是否存在重复的编码且重复元素是哪个
                    List<String> checkCode = new ArrayList<>();
                    for (List<String> list : lists) {
                        String code = list.get(1);
                        checkCode.add(code);
                    }
                    
                    HashSet<String> codeSet = new HashSet<>();
                    for (String code : checkCode) {
                        boolean b = codeSet.add(code);
                        if (!b) {
                            throw new Exception("文件中存在重复的编码: " + code);
                        }
                    }
    
    //只检验是否存在重复元素
    	       HashSet<String> set = new HashSet<>(list);
    	       Boolean result = set.size() == list.size() ? true : false;
    

    Stream操作List

    List取出对象中某一属性

      List<String> ids=list.stream().map(User::getId).collect(Collectors.toList());
    

    List,将id属性逗号拼接

    String str = List.stream().map(User::getId).collect(Collectors.joining(","));
    

    List,将id属性逗号拼接后转换为Strnig类型

    String str = List.stream().map(Restriction::getId).collect(Collectors.toList()).stream().map(w->w.toString()).collect(Collectors.joining(","));
    
    

    List转换为另一个List

     List<Employee> employees = persons.stream()
                    .filter(p -> p.getLastName().equals("l1"))
                    .map(p -> new Employee(p.getName(), p.getLastName(), 1000))
                    .collect(Collectors.toList());
    
    
    

    List过滤元素

    User match = users.stream().filter((user) -> user.getId() == 1).findAny().get();
    

    List转换为Map

    Map<Integer, String> result1 = list.stream().collect(
                    Collectors.toMap(User::getId, Hosting::getName));
    
    
    

    List与List差集

    //List1-List2
      List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
    

    List与List交集

      List<String> reduce2 = list1.stream().filter(list2::contains).collect(Collectors.toList());
    

    List与List去重并集

      list1.addAll(list2);
       List<String> reduce3 = list1.stream().distinct().collect(Collectors.toList());
    

    List<List>求交集

     @Override
        @Transactional(propagation = Propagation.SUPPORTS)
        public List<Group> findAll() {
            List<Group> all = groupDAO.findAll();
            /*处理小组目前标签*/
            /*对查到的所有小组进行遍历得知该小组所在班级id和小组id,根据这两个id查询到学生集合
             * 根据得到的学生查询到每个学生的标签集合
             *  set1.retainAll(set2);中set1就是交集*/
            for (Group group : all) {
                List<List<Lable>> allCourses=new ArrayList<>();
                String cid = group.getClazzId();
                String gid = group.getId();
                List<User> users = userDAO.queryUserBycg(cid, gid);
                for (User user : users) {
                    /*allCourses存放的是集合类型,为该小组内每个学生的标签集合*/
                    allCourses.add(user.getLables());
                }
                /*采用reduce方法对标签集合进行交集处理,两两求交集,若有交集则返回交集,若没有交集则返回为空*/
                List<Lable> lables= allCourses.stream().reduce((list1,list2)->{
                    list1.retainAll(list2);
                    return list1;
    
                }).orElse(Collections.emptyList());
                group.setLables(lables);
            }
            return all;
        }
    ---------------------------------------------------------------------------------------------------------
      listA.retainAll(listB);
            if(listA.size()>0){
                System.out.println("这两个集合有相同的交集");
            }else{
                System.out.println("这两个集合没有相同的交集");
            }
    
  • 相关阅读:
    [转]对Lucene PhraseQuery的slop的理解
    Best jQuery Plugins of 2010
    15 jQuery Plugins To Create A User Friendly Tooltip
    Lucene:基于Java的全文检索引擎简介
    9 Powerful jQuery File Upload Plugins
    Coding Best Practices Using DateTime in the .NET Framework
    Best Image Croppers ready to use for web developers
    28 jQuery Zoom Plugins Creating Stunning Image Effect
    VS2005 + VSS2005 实现团队开发、源代码管理、版本控制(转)
    禁止状态栏显示超链
  • 原文地址:https://www.cnblogs.com/xiaoyinger/p/12103722.html
Copyright © 2011-2022 走看看