Java: Streams
IntroStream 允许我们以声明式编程的方式来处理数据集。
Imperative VS Functional Programming假设我们有一个电影列表,我们想知道有多少个电影超过十个赞。
先有 Movie 类:
1234567891011121314public class Movie { private String title; private int likes; public Movie(String title, int likes) { this.title = title; this.likes = likes; } public int getLikes() { return likes; }}
然后进行如下操作:
123456789101112131415public class StreamDemo { public static void show() { List<Mov ...
Java: Lambda Expressions and Functional Interfaces
Functional InterfacesA functional interface is a interface with a single abstract method.
之前提过的 Comparable 接口就只有一个 compareTo 方法,所以它就是一个 functional interface。
Comparator 接口虽然有很多方法,但只有 compare 方法没有默认实现,所以它也是一个 functional interface。
创建包 lambdas,类 LambdasDemo 以及接口 Printer。
123public interface Printer { void print(String message);}
作为一个接口,Printer 可能有不同的实现。
123456public class ConsolePrinter implements Printer{ @Override public void print(String message) { System.out ...
Java: Collections
Intro
上图是集合框架的概述,其中绿色的是接口,蓝色的是类。
顶部的 Iterable 接口,实现这个接口的类都可以被用于 for 循环。
下面的 Collection 接口继承了上面的 Iterable 接口。实现这个接口的类都可以充当容器,或表示一些对象的集合。它实现的功能有添加(add),移除(remove),检查对象是否存在(contains),清空(clear)等等。
接下来是 Collection 的三个子接口,列表(List)、队列(Queue)和集合(Set)。
List 允许我们使用有序集合,并使用对象的索引访问对象,就像我们在数组(Array)中做的那样。
ArrayList 是动态数组。它在内部用数组来存储对象,如果数组已满,它会自动扩充(resize)。
LinkedList 是基于链表的数据结构。
Queue 使用的情况通常是分配共享资源。比如说一个打印机一次只能打印一张纸,我们就需要把任务放入队列,然后打印机就可以一个接着一个地完成任务。
Set 表示一个没有重复元素的集合。
The Need for Iterables准确地说,Iterable 接口不 ...
Java: Generics
为何需要范性先创建一个包 generics,然后创建一个类 List,它的实现如下:
123456789101112public class List { private int[] items = new int[10]; private int count; public void add(int item) { items[count++] = item; } public int get(int index) { return items[index]; }}
这里我们忽略很多细节,比如要检查 index 的范围。
现在我们可以去主函数中为刚才创建的类构造对象,并对其进行相关操作。
但可能之后我们又会需要一个 list 去记录用户,因此我们又得创建一个类。
因为之前创建的 List 类只能用于存储整型数。
所以我们需要范性来解决这个问题。
A Poor Solution简单的方法如下:
123456789101112public class List ...
Java: Exceptions
什么是异常首先,添加一个包
右击 src 下的子文件,即代码文件所在的文件夹
选择 New,Package
输入包名
在这个包下创建新的类 ExceptionsDemo
123456789public class ExceptionsDemo { public static void show() { sayHello(null); } public static void sayHello(String name) { System.out.println(name.toUpperCase()); }}
在主程序中调用
123456public class Main { public static void main(String[] args) { ExceptionsDemo.show(); }}
运行后将会报错
Exception in thread “main” java.lang.NullPo ...