ListUtils技巧大全:提升你的Java列表操作效率( 二 )


List<UserObject> listNotMeetingPredicate = ListUtils.selectRejected(defaultUserList, userObj -> userObj.getUserSalary() > 20000.0);assertEquals(2, listNotMeetingPredicate.size());9)IsEqualList
此方法用于比较两个列表 。仅当两个列表具有相同的大小,并且两个列表中所有相应的元素对都相等时,才返回true 。
List<Integer> list1 = Arrays.asList(1, 2, 3, 4);List<Integer> list2 = Arrays.asList(1, 2, 3, 4);List<Integer> list3 = Arrays.asList(3, 4, 5, 6, 7);assertTrue(ListUtils.isEqualList(list1, list2));assertFalse(ListUtils.isEqualList(list1, list3));它还可以比较两个不同的List接口实现 。示例如下:比较ArrayList、LinkedList和HashSet 。
List<Integer> list1 = Arrays.asList(1, 2, 3, 4);List<Integer> linkedList = new LinkedList<>(list1);Set<Integer> hashSet = new HashSet<>(list1);assertTrue(ListUtils.isEqualList(list1, linkedList));assertTrue(ListUtils.isEqualList(list1, hashSet));10)Intersection
该方法接受两个列表作为输入 , 并返回两个列表的交集 。
List<Integer> list1 = Arrays.asList(1, 2, 3, 4);List<Integer> list3 = Arrays.asList(3, 4, 5, 6, 7);assertEquals(Arrays.asList(3, 4), ListUtils.intersection(list1, list3));11)LazyList
这是ListUtils类提供的另一个有趣的方法 。它接收一个列表和一个转换器或工厂作为输入,然后返回一个懒加载列表,其元素在需要时创建 。
如下所示:
Transformer<Integer, UserObject> transformer = input -> {if (defaultUserList.size() > input)return defaultUserList.get(input);elsereturn new UserObject();};List<UserObject> lazyList = ListUtils.lazyList(new ArrayList<UserObject>(),transformer);assertEquals(defaultUserList.get(0), lazyList.get(0));assertEquals(new UserObject(), lazyList.get(6));assertEquals(1, lazyList.indexOf(null));



推荐阅读