Pomoc z generatorem listy

0

Cześć

Mam problem z zadaniem, które wydaje mi się mocno pokręcone.
Mam napisać generator, który wygeneruje listę 100 kotów i psów. Nadklasa Zwierzę z polami type, name, age, boolean sterilized, podklasy Pies i Kot).
Jeśli dobrze myślę to można tu użyć lambdę i interfejs Supplier. Mój problem polega na implementacji takiego kodu by zrobić losowość tego czy będzie tworzony pies czy będzie tworzony kot, bo od tego zależy powodzenie zadania;)
Prosiłbym o wskazówki, z góry dzięki

Póki co stworzyłem klase zwierzę z polami i pod klasy pies i kot, które rozszerzają klasę Animal


public class Animal {


    private String name;
    private String type;
    private int age;
    private boolean sterilized;

    public Animal() {
    }

    public Animal(String name, String type, int age, boolean sterilized) {
        this.name = name;
        this.type = type;
        this.age = age;
        this.sterilized = sterilized;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isSterilized() {
        return sterilized;
    }

    public void setSterilized(boolean sterilized) {
        this.sterilized = sterilized;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", age=" + age +
                ", sterilized=" + sterilized +
                '}';
    }
}
1

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Random.html

Generuj sobie losową wartość i na podstawie tego twórz jedno albo drugie.

0
class AnimalFactory{
    private final Random r = new Random();
    public Animal createRandomAnimal(){
        if(random.nextBoolean()){
            return new Kot();
        } else{
           return new Pies();
        }
    }
}

I teraz takie AnimalFactory::createRandomAnimal to nic innego jak Supplier<Animal>

0

Mógłby ktoś bardziej doświadczony rzucić okiem na ten kod :)??


 Random random = new Random();
        List<Animal> animals = new ArrayList<>();
        for (int i=1; i<=100; i++) {
            Supplier<Animal> randomAnimal = () -> {
                boolean randBoolean = random.nextBoolean();
                if (randBoolean) {
                    return new Dog();
                } else {
                    return new Cat();
                }
            };
            animals.add(randomAnimal.get());
        }
        for(Animal animal : animals) {
            System.out.println(animal.getClass().getSimpleName());

0

Tylko czemu chcesz to napisać w taki nieczytelny sposób? o_O to jest przecież jakiś dramat.

import java.util.List;
import java.util.Random;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

class Animal {
}

class Dog extends Animal {
}

class Cat extends Animal {
}


class AnimalFactory {
    private final Random random = new Random();

    public Animal createRandomAnimal() {
        if (random.nextBoolean()) {
            return new Cat();
        } else {
            return new Dog();
        }
    }
}

class ListGenerator<T> {
    List<T> generate(Supplier<T> supplier, int count) {
        return IntStream.range(0, count)
                .mapToObj(x -> supplier.get())
                .collect(Collectors.toList());
    }
}

public class Animals {
    public static void main(String[] args) {
        ListGenerator<Animal> generator = new ListGenerator<>();
        AnimalFactory factory = new AnimalFactory();

        List<Animal> animals = generator.generate(factory::createRandomAnimal, 10);
        for (Animal animal : animals) {
            System.out.println(animal.getClass().getSimpleName());
        }
    }
}

W takim kodzie przynajmniej widać że ten Supplier ma jakiś sens istnienia.

1

@MalarzAr:

animals.stream()
    .filter(x->x.isCat())
    .count();

Albo jakieś

animals.stream()
    .filter(x->x.getAge())
    .max();

Nadal nie rozumiem co konkretnie sprawia ci trudność.

1 użytkowników online, w tym zalogowanych: 0, gości: 1