java 集合操作api

java.util.List:

1.List.addAll():添加所有元素到列表中

com.sun.tools.javac.util.List:

1. 将指定的元素转为集合 

List strings = List.of("a", "bb", "cc", "ddd");

2. 比较两个集合所含元素是否相同

List strings = List.of("a", "bb", "cc", "ddd");
List strings2 = List.of("a", "bb", "cc","ddd");
boolean equals = List.equals(strings, strings2);
System.out.println(equals); //true

3.过滤掉集合里某个元素

List list1 = List.filter(List.of("a", "bb", "cc", "ddd"), "a");

System.out.println(list1.toString()); // bb,cc,ddd

4. 将list转为指定类型, 方法里面用的instance of进行判断

List strings = List.of("a", "bb", "cc", "ddd");
List convert = List.convert(String.class, strings);
System.out.println(convert);

 

java.util.Collections

1. Collections.unmodifiable*()  将list/map转换为不可变的

List strings = List.of("a", "bb", "cc", "ddd");
LinkedHashMap> collect1 = strings.stream().collect(groupingBy(String::length, LinkedHashMap::new, toCollection(TreeSet::new)));

Map> integerTreeSetMap = Collections.unmodifiableMap(collect1);
integerTreeSetMap.put(1,null); // 报java.lang.UnsupportedOperationException

2.Collections.enumeration 获取一个枚举集合

List list = new ArrayList(); 

list.add("aa"); 

Enumeration enumeration = Collections.enumeration(list);

java.util.stream

1. 并行流下,按顺序执行 forEachOrdered()

//输出的顺序不一定(效率更高)
Stream.of("AAA", "BBB", "CCC").parallel().forEach(s -> System.out.println("Output:" + s));
//输出的顺序与元素的顺序严格一致
Stream.of("AAA", "BBB", "CCC").parallel().forEachOrdered(s -> System.out.println("Output:" + s));

2.转成数组 toArray()

Person[] men = people.stream()
                          .filter(p -> p.getGender() == MALE)
                          .toArray(Person[]::new);

3. collect 收集

List strings = List.of("a", "bb", "cc", "ddd");

ArrayList collect3 = strings.stream().collect(ArrayList::new, ArrayList::add,ArrayList::addAll); 
  

ArrayList::new  一个创建新结果容器的函数

ArrayList::add 一个累加器

ArrayList::addAll  组合器,组合两个值的函数

4. java.util.stream.Collectors 下 mapping()

Collector mapping(Function mapper,
                           Collector downstream)
第一个参数mapper :一个要应用于输入元素的函数映射器
第二个参数downstream :  收集器,将接受映射的值

List list = List.of("1", "2", "3", "4");
        java.util.List collect4 = strings.stream().collect(mapping(Integer::parseInt, toList()));

这个mapping()跟stream.map() 功能一样,只是maping()是作用于收集器里面的,map()是作用在流里面

应用的场景还挺多的,java8注释上举了个例子,你在grouping by之后,怎么将收集的集合映射成另一个集合,这里就用mapping

Map> namesByCity
              = people.stream().collect(groupingBy(Person::getCity,
                                                   mapping(Person::getLastName, toSet())));

5. java.util.stream.Collectors 下 counting()

counting() { return reducing(0L, e -> 1L, Long::sum); }

看下他的方法实现,用了个Long::sum的映射函数,如果你想得到一个int的累加结果,就
用 reducing(0,a->1, Integer::sum)就行了

6. predict() 谓词

可以给谓词添加一个谓词链

 List> allPredicates = new ArrayList<>();
        allPredicates.add(str -> str.startsWith("A"));
        allPredicates.add(str -> str.contains("d"));
        allPredicates.add(str -> str.length() > 4);

        Stream stringStream = Stream.of("Ad123","qqq","a");
        List result =stringStream
                // 给一个归约初始的值 true
                .filter(allPredicates.stream().reduce(x->true, Predicate::and))
                .collect(Collectors.toList());
        System.out.println(result);

7. java.util.stream.Collectors 下 toMap()

java8注释举的例子:

 Map studentIdToStudent =
           students.stream().collect(toMap(Student::getId,
                                             Functions.identity());

Functions.identity() 就是个函数接口默认的实现,用lamda表示就是 a->a

你可能感兴趣的:(java)