Iloczyn kartezjański w javie

0

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.

0

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

0

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 ?

2

czy wiesz co robi map ? bo podpowiem że nie mape :D

0

@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) ?

3

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.

0

Wielkie dzięki, tego potrzebowałem :P

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