7.2 Functional Programming and Collections
Working with Selected Classes from the Java API
1. Course Overview
This course covers key classes from the Java API, focusing on commonly used data structures like ArrayList, lambda expressions, working with String and StringBuilder, and handling dates and times. By the end of the course, you will understand how to manipulate these classes effectively in Java applications.
2. Working with ArrayList
Creating ArrayLists
An ArrayList is a resizable array from the java.util package. Unlike arrays, it can grow in size dynamically. To create an ArrayList, you use the ArrayList class.
Example:
ArrayList<String> fruits = new ArrayList<>();
Adding and Removing Elements
You can add elements to an ArrayList using the add() method, and remove elements using the remove() method.
Example:
fruits.add("Apple");
fruits.remove("Apple");
Inspecting and Traversing ArrayLists
You can check the size of an ArrayList using size(), and traverse it using a for-each loop or an iterator.
Example:
for (String fruit : fruits) {
System.out.println(fruit);
}
Autoboxing with ArrayLists
Java supports autoboxing, which allows primitive types to be automatically converted to their corresponding wrapper class when used in an ArrayList.
Example:
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(5); // Autoboxes the int 5 to Integer
3. Working with Lambda Predicates
Lambda Functional Interfaces
A functional interface is an interface with a single abstract method. Lambdas are used to provide implementations for these interfaces in a concise manner.
Example:
@FunctionalInterface
interface Printer {
void print(String message);
}
Printer printer = (message) -> System.out.println(message);
Lambda Expressions
Lambda expressions are a way to create anonymous methods in Java, making your code shorter and more readable.
Example:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach((n) -> System.out.println(n));
Lambda Predicates
A Predicate is a functional interface that takes an argument and returns a boolean. It is often used to filter data in Java.
Example:
Predicate<Integer> isEven = (n) -> n % 2 == 0;
System.out.println(isEven.test(4)); // true
4. Working with Strings and StringBuffer
The Immutable String
In Java, String objects are immutable, meaning once they are created, their value cannot be changed. Any modification results in the creation of a new String object.
String Concatenation
Concatenating strings can be done using the + operator or the concat() method.
Example:
String fullName = "John" + " " + "Doe";
String Methods, Part 1
Some common string methods include length(), charAt(), and substring().
Example:
String name = "John";
int length = name.length();
char initial = name.charAt(0);
String Methods, Part 2
Additional methods like indexOf(), replace(), and toLowerCase() are frequently used.
Example:
String text = "Hello World";
text = text.replace("World", "Java");
StringBuilder, Part 1
StringBuilder is a mutable sequence of characters, which means it can be modified without creating new objects. It's more efficient for repeated string operations.
Example:
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
StringBuilder, Part 2
Other StringBuilder methods include insert(), delete(), and reverse().
Example:
sb.insert(5, " Java");
sb.reverse();
5. Working with Dates and Times
Create Dates and Times
The LocalDate, LocalTime, and LocalDateTime classes from the java.time package are used to represent dates and times in Java.
Example:
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
Calculate Dates and Times
You can perform date and time calculations using methods like plusDays() and minusMonths().
Example:
LocalDate futureDate = date.plusDays(10);
Periods and Durations
Period is used to represent the amount of time between two dates, while Duration represents the time between two instants or times.
Example:
Period period = Period.between(LocalDate.of(2022, 1, 1), LocalDate.now());
Format Dates and Times
You can format dates and times using the DateTimeFormatter class.
Example:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String formattedDate = date.format(formatter);
Conclusion
In this tutorial, we explored key classes from the Java API, focusing on ArrayList, lambda expressions, String, StringBuilder, and date/time manipulation. These are fundamental building blocks for Java programming, and mastering them will help you write efficient and effective Java code.