java---集合

155 阅读4分钟
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

//collections 集合遍历 增强for
// List Set  Map 接口
// 动态"数组"
// List 有序的可重复的集合
// List ArrayList(不安全效率高) + LinkedList(频繁的插入删除操作)
public class Jihe {
    public static void main(String[] args) {


/**
 * 集合常用方法  Collection list = new ArrayList()
 * add()
 * contains(Obj obj) 是否包含此项  (添加obj对象时。要求obj所在类重写equals方法)
 * containsAll(是否都存在)
 * remove()(返回值true false) 原集合会变 删除移除
 * removeAll(Collection col) 原集合会变 会移除形参中的元素
 * retainAll(Collection col) (返回值true false)原集合会变成相同的交集
 * equals(Collection col)  (返回值true false)
 * toArray() 集合转化成数组
 * Arrays.asList() 集合转化成数组
 * iterator()
 * isEmpty() 判断集合是否为空
 * clear() 清空
 */

/**
 * list接口常用api size属性 集合真实的长度
 * add() 添加
 * addAll(index,collections) 会把参数集合里面的元素一个个的添加
 * get(index)    获取元素
 * indexOf(元素) 获取元素首次在集合中出现的索引 lastIndexOf;没有则返回-1
 * remove(index) 按照索引位置删除,返回删除位置的元素,原集合会改变
 * set(index,元素) 设置指定位置的元素,原集合会改变  替换更新
 * subList(startIndex,endIndex) 截取原集合,原集合不变,返回值是截取后的集合
 * 遍历:iterator()用于遍历集合  hasNext()  next()  增强for循环 普通for循环
 */

/**
 * HashMap接口常用方法
 * put(key,value) 添加或修改
 * putAll(map) 把另外一个map中的元素添加
 * remove(key) 返回值value,不存在就返回null,原集合会改变 删除指定key的这项
 * clear() 清除元素
 * get(key) 查询key对应的value,不存在就返回null
 * containsKey(key) 返回布尔值,判断当前集合是否存在该key
 * containsValue(Value)返回布尔值,判断当前集合是否存在该Value
 *  size() key-value 对数
 * isEmpty() 集合是否为空,返回布尔值
 *  equals(map) 判断两个集合是否一样,返回布尔值
 * 遍历: set---collection
 *  遍历key map.keySet().iterator()  然后再hasNext() next()
 *  遍历Value map.values() 再增强for或者iterator遍历
 *  遍历key--value 遍历key的时候 value = map.get(key)
 * values() 返回value的collection集合
 */

/**
 * Collections 工具类 常用方法
 * reverse(list):翻转集合
 * shuffle(list): 随机集合
 * sort(list,Comparactor):自然排序或者定制排序
 * swap(list,index,index):交换指定位置的元素
 * frequency(list,元素):指定元素出现的次数
 * copy(dest,source): 此时需要指定dest集合的size()
 * replaceALL(list,oldVal,newVal) 替换
 * synchronizedList(list) 返回线程安全的list
 */


    List<Integer> list = Arrays.asList(1, 2);
    List dest = Arrays.asList(new Object[list.size()]);
    Collections.copy(dest, list);

/**
 * Stream Api
 * 创建(通过集合.stream() 或者 Arrays.stream(数组) 或者 Stream.of(1,4,5,3))----中间操作()---终止操作
 * 中间操作 filter过滤符合要求的集合
 * 中间操作 limit(数量) 截断集合的数量前面的元素集合
 * 中间操作 skip(数量)  跳过集合的数量前面的元素集合
 * distinct() 会根据元素的 hashCode() equals()方法去重
 * map() 映射 对集合某一个属性进行单独操作
 * flatmap()
 * sorted()  排序 默认从小到大排序。也可以定制排序
 *
 * Stream 终止操作
 * allMatch() 根据所有项目returntrue 则返回true;
 * anyMatch() 只有有一项符合则返回true
 * noneMatch() 全都不匹配才返回true
 * findFirst()  第一个元素
 * count() 返回个数
 * max(Comparctor) 返回最大值  min  返回最小
 * forEach()
 * reduce(初始值,) 求和
 * collect(Collectors.toList) 返回list集合  collect(Collectors.toList)
 */
    //中间操作
    System.out.println("*****");
    List<StreamPerson> person = StreamPerson.getPerson();
    person.stream().distinct().forEach(System.out::print);
    System.out.println("*****");
    person.stream().map(item -> item.getName()).filter(i -> i.length() > 5).forEach(System.out::print);
    System.out.println("*****");
    //StreamPerson提供比较类。
    person.stream().sorted().forEach(item -> System.out.println(item));
    System.out.println("------");
    person.stream().sorted((o1, o2) -> -Integer.compare(o1.getAge(), o2.getAge())).forEach(item -> System.out.println(item));

    //终止操作
    boolean b = person.stream().allMatch(item -> item.getAge() > 4);
    System.out.println("b---" + b);
    Optional<StreamPerson> first = person.stream().findFirst();
    System.out.println("first" + first);
    Optional<StreamPerson> max = person.stream().max((o1, o2) -> Integer.compare(o1.getAge(), o2.getAge()));
    System.out.println("max---" + max);
    long count = person.stream().filter(item -> item.getAge() > 50).count();
    System.out.println("count---" + count);
    //注意要先map
    Integer reduce = person.stream().map(item -> item.getAge()).reduce(10, (item1, item2) -> item1 + item2);
    System.out.println("reduce---" + reduce);
    //person.clear();
    ArrayList<Object> objects = new ArrayList<>();
    System.out.println(objects.isEmpty());
    }
}

class StreamPerson implements Comparable<StreamPerson> {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public StreamPerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static List<StreamPerson> getPerson() {
        List<StreamPerson> list = new ArrayList<StreamPerson>();
        list.add(new StreamPerson("bwfbwf", 1));
        list.add(new StreamPerson("wmy", 10));
        list.add(new StreamPerson("zs", 3));
        list.add(new StreamPerson("ls", 13));
        list.add(new StreamPerson("ls", 70));
        return list;
    }

    @Override
    public String toString() {
        return "StreamPerson{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        StreamPerson that = (StreamPerson) o;
        return age == that.age &&
                Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public int compareTo(StreamPerson o) {
        return Integer.compare(age, o.getAge());
    }
}