Hints
map er en højere-ordens-funktion, der transformerer hvert element i en Java Collection (f.eks. ArrayList) ved at anvende en funktion og returnere en ny Java Collection med de transformerede værdier.
Kort fortalt:
- Input: en mapping-funktion + en Java Collection.
- Operation: funktionen anvendes på hvert element.
- Output: ny Collection med samme længde.
filter vælger elementer der opfylder et predicate og returnerer en ny Java Collection med dem.
Kort fortalt:
- Input: predicate + Java Collection.
- Operation: predicate evalueres for hvert element.
- Output: ny Collection med elementer hvor predicate er sand.
Eksempel på at skabe Car-objekter med Supplier<Car> (navn og pris).
public class Car {
private String name;
private double price;
public Car(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
Opret 10 biler med tilfældige navne og priser mellem 0 og 1.000.000:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.Supplier;
public class CarFactory {
public static void main(String[] args) {
List<String> carNames = Arrays.asList("Mercedes","BMW","Audi","Tesla","Ford","Fiat","Peugeot","Citroen","Renault","Toyota");
Supplier<Car> carSupplier = () -> {
Random random = new Random();
int randomIndex = new Random().nextInt(carNames.size());
String randomName = carNames.get(randomIndex);
double randomPrice = random.nextDouble() * 1000000;
return new Car(randomName, randomPrice);
};
List<Car> cars = createCars(10, carSupplier);
cars.forEach(System.out::println);
}
public static List<Car> createCars(int numCars, Supplier<Car> supplier) {
List<Car> cars = new ArrayList<>();
for (int i = 0; i < numCars; i++) {
cars.add(supplier.get());
}
return cars;
}
}
Serializing objects in Java is a way to convert objects into a binary format that can be stored in a file. This is useful for storing objects in a file or sending them over a network. Deserialization is the reverse process of converting a binary format into an object.
package demos.day2;
import java.io.*;
import java.lang.reflect.Type;
// Show how to Serialize an object and write it to a file
public class WriterReader<T> {
public static void main(String[] args) {
Book book = Book.builder()
.title("The Lord of the Rings")
.author("J.R.R. Tolkien")
.publicationYear(1954)
.rating(4.5)
.numberOfPages(1178)
.build();
// Book implements Serializable
WriterReader<Book> writerReader = new WriterReader<>();
String fileName = writerReader.writeObjectToFile(book);
Book bookFromFile = writerReader.getObjectFromFile(fileName);
System.out.println("Book read from file"+bookFromFile);
}
public String writeObjectToFile(T obj){
Type typeOf = obj.getClass();
String fileName = typeOf.toString();
String fileSuffix = (java.time.LocalDateTime.now()).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"));
fileName = fileName + fileSuffix + ".ser";
try {
File file = new File(fileName);
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(obj);
out.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return fileName;
}
public T getObjectFromFile(String fileName){
try{
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream in = new ObjectInputStream(fis);
T obj = (T) in.readObject();
in.close();
fis.close();
return obj;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}