Witam,
posiadam pewną kolekcje zawierającą obiekty typu X. Obiekt X posiada dwa pola a oraz b przyjmujące wartości a={1,2,3,4} b={A,B,C,D,E,F,G} w jak najlepszy sposób wykonać mnożenie - a x b tak, aby nowo utworzone obiekty (w tym wypadku będzie ich 4*7 = 28) trafiły do tej kolekcji.
Możesz użyć głowy i samemu napisać albo poszukać gotowca, np: http://stackoverflow.com/questions/9591561/java-cartesian-product-of-a-list-of-lists
Próbuje osiągnąć coś prostego w zapisie, coś jak:
new ArrayList<Card>(
Arrays.asList(new Card(2,Color.Karo),new Card(2,Color.Kier),new Card(2,Color.Pik),new Card(2,Color.Trefl))
.stream()
.collect(Collectors.toCollection(LinkedHashSet<Card>::new))
);
Na razie próbuje wypełnić liste 52 wartościami po 13x new Card(2,Color.Kier) 13x new Card(2,Color.Pik)... później funkcją .map zrobić reszte. Ma to sens czy to głupi pomysł, nie mający sensu ?
czy wiesz co robi map ? bo podpowiem że nie mape :D
@niezdecydowany
Chce napisać funkcje lambda/klase anonimowa która zamieni wartość card.value... Skąd wywnioskowałeś z mojej wypowiedzi, że myślę o tworzeniu kolekcji map 0.o ? Skoro tym bardziej całość zbieram do kolekcji LinkedHashSet ?
EDIT:
Przydajcie się na coś, zamiast udzielać głupich komentarzy i powiedzcie jak w konstruktorze dodać po 6 obiektów każdego z kolorów
new ArrayList<Card>(TUTAJ) ?
Java jest strasznie biedna w niektórych miejscach. Tak sobie to uświadomiłem pisząc:
public class CartesianCarts {
private final List<String> vals;
public CartesianCarts() {
vals = new ArrayList<String>();
Collections.addAll(vals, "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "D", "K", "A");
}
public List<String> buildDeck() {
return Arrays.stream(Symbols.values())
.flatMap(s -> vals.stream().map(v -> v + s.toString()))
.collect(Collectors.toList());
}
}
enum Symbols {
SPADES("♠"),
CLUBS("♣"),
HEARTS("♥"),
DIAMONDS("♦");
private final String symbol;
Symbols(String symbol) {
this.symbol = symbol;
}
@Override
public String toString() {
return symbol;
}
}
Można by to pewno ulepszyć, bo w wielokrotnie leci po liście wartości kart, ale to szczegół. Generalnie w Javie brakuje mi tupla w tym miejscu.
Wielkie dzięki, tego potrzebowałem :P