Skip to main content
Dat 2. semester Bornholm
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Hints

Hints til dag 2 (Java Deep Dive I)

map-funktionen

map er en højere-ordens-funktion, der transformer­er 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:

  1. Input: en mapping-funktion + en Java Collection.
  2. Operation: funktionen anvendes på hvert element.
  3. Output: ny Collection med samme længde.

filter-funktionen

filter vælger elementer der opfylder et predicate og returnerer en ny Java Collection med dem.

Kort fortalt:

  1. Input: predicate + Java Collection.
  2. Operation: predicate evalueres for hvert element.
  3. Output: ny Collection med elementer hvor predicate er sand.

Supplier

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;
    }
}

How to Serialize Objects in Java (and write them to a file)

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.

Example code

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;
        }
    }
}