博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java-Day016
阅读量:2291 次
发布时间:2019-05-09

本文共 7587 字,大约阅读时间需要 25 分钟。

运气不可能持续一辈子,能帮助你持续一辈子的东西只有你个人的能力。

  • Collections
  • Comparable
  • Comparator
  • Stream

一、Collections

提供了对容器操作的工具方法,与 Arrays 使用差不多。

1、常用方法

List
list = new ArrayList
(); list.add(50); list.add(33); list.add(52); list.add(45); System.out.println(list); Collections.sort(list); // 排序、默认按照升序排序 System.out.println(list); System.out.println(Collections.binarySearch(list, 50)); // 二分查找(前提必须是有序的) Collections.reverse(list); // 反转 System.out.println(list); Collections.shuffle(list); // 乱序 System.out.println(list); Collections.fill(list, 0); // 填充,填充为指定值 System.out.println(list);
运行结果
[50, 33, 52, 45]
[33, 45, 50, 52]
2
[52, 50, 45, 33]
[33, 45, 52, 50]
[0, 0, 0, 0]

二、Comparable

通过实现Comparable接口进行排序

public class Student implements Comparable
{
private String name; private int age; public Student() {
super(); } public Student(String name, int age) {
super(); this.name = name; this.age = 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; } @Override public int hashCode() {
final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) {
if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) {
if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public String toString() {
return "Student [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Student o) {
// TODO Auto-generated method stub // 0 不变 负数小于 正数大于 return this.age-o.getAge(); }}
public class Test2 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add(new Student("张三",20)); list.add(new Student("李四",22)); list.add(new Student("王二",24)); list.add(new Student("麻子",19)); Collections.sort(list); // 排序 for(Student s:list) {
System.out.println(s); } }}
运行接口
Student [name=麻子, age=19]
Student [name=张三, age=20]
Student [name=李四, age=22]
Student [name=王二, age=24]

三、Comparator

Comparator比较器,可以根据需要定制特定的比较规则。

public class Test3 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add(50); list.add(33); list.add(52); list.add(45); System.out.println(list); // Comparator 内部类排序 Collections.sort(list, new Comparator
() {
@Override public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub return o1.compareTo(o2); // 使用Integer提供的比较规则 } }); System.out.println(list); System.out.println("------------"); Collections.shuffle(list); // 随机排序 System.out.println(list); System.out.println("------------"); Collections.sort(list,(o1,o2)->o1-o2); // lambda排序 System.out.println(list); System.out.println("------------"); Collections.sort(list,Test3::a1); System.out.println(list); } static int a1(int o1,int o2) {
return -(o1-o2); }}
运行结果
[50, 33, 52, 45]
[33, 45, 50, 52]
------------
[52, 45, 33, 50]
------------
[33, 45, 50, 52]
------------
[52, 50, 45, 33]

四、Stream

1、创建源

public class Test4 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add(50); list.add(33); list.add(52); list.add(45); // 方式一 Stream
stream1 = list.stream(); // 方式二 Integer[] ints = {
1,2,3,4,5,6,7,8,9}; Stream
stream2 = Arrays.stream(ints); // 方式三 Stream
stream3 = Stream.of(1,2,3); stream3 = Stream.of(ints); }}

2、中间操作

2.1、切片和筛选

public class Test5 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add(new Student("张三",20)); list.add(new Student("李四",22)); list.add(new Student("王二",24)); list.add(new Student("麻子",19)); list.add(new Student("麻子",19)); // 过滤,年龄大于20的 list.stream().filter(x->x.getAge()>20).forEach(System.out::println); System.out.println("---------"); // 截取元素,获取前两个 list.stream().limit(2).forEach(System.out::println); System.out.println("---------"); // 跳过元素,敲过前两个 list.stream().skip(2).forEach(System.out::println); System.out.println("---------"); // 筛选去重,去掉重复的元素 list.stream().distinct().forEach(System.out::println); }}
运行结果
Student [name=李四, age=22]
Student [name=王二, age=24]
---------
Student [name=张三, age=20]
Student [name=李四, age=22]
---------
Student [name=王二, age=24]
Student [name=麻子, age=19]
Student [name=麻子, age=19]
---------
Student [name=张三, age=20]
Student [name=李四, age=22]
Student [name=王二, age=24]
Student [name=麻子, age=19]

2.2、排序

public class Test6 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add("aa"); list.add("cc"); list.add("bb"); list.add("dd"); // 自然排序 list.stream().sorted().forEach(System.out::println); System.out.println(); // 定制排序 list.stream().sorted((o1,o2)->o1.compareTo(o2)).forEach(System.out::println);; }}
运行结果
aa
bb
cc
dd
aa
bb
cc
dd

3、终止

3.1、查找匹配

public class Test7 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add(50); list.add(33); list.add(52); list.add(45); // 是否匹配所有元素 boolean flag = list.stream().allMatch(x->x>30); System.out.println(flag); // 至少匹配一个元素 flag = list.stream().anyMatch(x->x>50); System.out.println(flag); // 没有匹配所有元素 flag = list.stream().noneMatch(x->x>50); System.out.println(flag); // 返回第一个元素 Optional
opt = list.stream().findFirst(); System.out.println(opt); // 返回任意一个元素 opt = list.stream().findAny(); System.out.println(opt); // 返回流中的元素 System.out.println(list.stream().count()); // 返回流中的最大值 opt = list.stream().max((x,y)->x-y); System.out.println(opt); // 返回流中的阿最小值 opt= list.stream().min((x,y)->x-y); System.out.println(opt); }}
运行结果
true
true
false
Optional[50]
Optional[50]
4
Optional[52]
Optional[33]

3.2、收集

public class Test8 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add(50); list.add(33); list.add(52); list.add(45);// list.add(45); // 返回一个List List
list1 = list.stream().limit(2).collect(Collectors.toList()); System.out.println(list1); // 返回Set,去除重复 Set
set = list.stream().collect(Collectors.toSet()); System.out.println(set); // 返回Map Map
map = list.stream().collect(Collectors.toMap((x)->{
return x;}, (x)->{
return x;})); System.out.println(map); }}
运行结果
[50, 33]
[33, 50, 52, 45]
{33=33, 50=50, 52=52, 45=45}
public class Test10 {
public static void main(String[] args) {
List
list = new ArrayList
(); list.add(50); list.add(33); list.add(52); list.add(45); System.out.println(list.stream().collect(Collectors.counting())); // 求总数 System.out.println(list.stream().collect(Collectors.averagingInt(x->x))); // 求平均值 System.out.println(list.stream().collect(Collectors.summingInt(x->x))); // 求总和 System.out.println(list.stream().collect(Collectors.maxBy((x,y)->Integer.compare(x, y)))); // 求最大值 }}
运行结果
4
45.0
180
Optional[52]

Tips:

  • Stream自己不会储存元素
  • Stream不会改变源对象,相反,会返回一个持有结果的新Stream
  • Stream操作是延迟执行的,也就意味着需要结果的时候才会执行

转载地址:http://zcsnb.baihongyu.com/

你可能感兴趣的文章
UIImage常用属性和方法
查看>>
会报编译器警告的Xcode 6.3新特性:Nullability Annotations
查看>>
2015 Objective-C 三大新特性
查看>>
Objective-C中instancetype详解
查看>>
音频、视频框架概括说明
查看>>
手势(UIGestureXXX)使用详解
查看>>
UIMenuController和UIMenuItem,即iOS剪贴板
查看>>
新一代数据查询语言GraphQL来啦
查看>>
Simple Zend_Layout Example
查看>>
The Zend Framework MVC Architecture
查看>>
Framework框架分析总结
查看>>
Windows7下centOS 硬盘安装双系统
查看>>
GRUB引导程序参数
查看>>
phpMyAdmin简明安装教程
查看>>
独立安装LAMP时需要注意的几点
查看>>
socket
查看>>
判断远程url是否有效的几种方法
查看>>
javascript中编写类似in_array()的原型函数
查看>>
go 数据库操作
查看>>
php读取二进制流
查看>>