■ Contents
xv
Creating Different Views of a Collection ����������������������������������������������������������������������� 659
Read-Only Views of Collections ���������������������������������������������������������������������������������������������������������� 659
Synchronized View of a Collection ������������������������������������������������������������������������������������������������������ 660
Checked Collections ��������������������������������������������������������������������������������������������������������������������������661
Creating Empty Collections ������������������������������������������������������������������������������������������ 662
Creating Singleton Collections ������������������������������������������������������������������������������������� 662
Understanding Hash-Based Collections ����������������������������������������������������������������������� 663
Summary ���������������������������������������������������������������������������������������������������������������������� 668
■Chapter 13: Streams ������������������������������������������������������������������������������������������ 675
What Are Streams? ������������������������������������������������������������������������������������������������������� 675
Streams Have No Storage �������������������������������������������������������������������������������������������������������������������676
Infinite Streams ���������������������������������������������������������������������������������������������������������������������������������� 676
Internal Iteration vs� External Iteration ����������������������������������������������������������������������������������������������� 676
Imperative vs� Functional �������������������������������������������������������������������������������������������������������������������678
Stream Operations ������������������������������������������������������������������������������������������������������������������������������678
Ordered Streams ��������������������������������������������������������������������������������������������������������������������������������680
Streams Are Not Reusable ������������������������������������������������������������������������������������������������������������������ 680
Architecture of the Streams API ��������������������������������������������������������������������������������������������������������� 680
A Quick Example ���������������������������������������������������������������������������������������������������������� 682
Creating Streams���������������������������������������������������������������������������������������������������������� 686
Streams from Values ��������������������������������������������������������������������������������������������������������������������������686
Empty Streams ����������������������������������������������������������������������������������������������������������������������������������� 689
Streams from Functions ���������������������������������������������������������������������������������������������������������������������689
Streams from Arrays ���������������������������������������������������������������������������������������������������������������������������694
Streams from Collections �������������������������������������������������������������������������������������������������������������������695
Streams from Files �����������������������������������������������������������������������������������������������������������������������������695
Streams from Other Sources �������������������������������������������������������������������������������������������������������������� 697
Representing an Optional Value ����������������������������������������������������������������������������������� 698
Applying Operations to Streams ����������������������������������������������������������������������������������� 703
Debugging a Stream Pipeline �������������������������������������������������������������������������������������������������������������704
Applying the ForEach Operation ���������������������������������������������������������������������������������������������������������705