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());
}
}