Что означает этот миксин?

У вас есть несколько вариантов. Самое простое - связать своих коллекционеров:

Map>> map = people
    .collect(Collectors.groupingBy(Person::getName,
        Collectors.groupingBy(Person::getAge));

. Затем, чтобы получить список 18-летних людей по имени Фред, вы будете использовать:

map.get("Fred").get(18);

Второй вариант - определить класс, представляющий группировку. Это может быть внутри Person:

class Person {
    public static class NameAge {
        public NameAge(String name, int age) {
            ...
        }

        // must implement equals and hash function
    }

    public NameAge getNameAge() {
        return new NameAge(name, age);
    }
}

Затем вы можете использовать:

Map> map = people.collect(Collectors.groupingBy(Person::getNameAge));

и искать с помощью

map.get(new NameAge("Fred", 18));

Наконец, если вы этого не сделаете хотите реализовать свой собственный групповой класс, тогда многие из фреймворков Java вокруг имеют класс pair, предназначенный именно для такого типа вещей. Например: apache commons pair Если вы используете одну из этих библиотек, вы можете сделать ключ к карте парой имен и возраста:

Map, List> map =
    people.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));

и получить с помощью :

map.get(Pair.of("Fred", 18));

Лично мне очень не нравятся эти кортежные библиотеки. Они, кажется, являются полной противоположностью хорошему дизайну OO: они скрывают намерение, а не обнажают его.

Сказав, что вы можете объединить два вторых варианта, определив свой собственный класс группировки, но реализуя его, просто расширив Pair, что значительно облегчает вам работу по определению equals и т. д. и скрывает использование кортежа как удобную деталь реализации, как и любую другую коллекцию.

Удачи.

1
задан Trevor Reid 11 April 2019 в 18:00
поделиться

1 ответ

Амперсанд (& amp;) является комбинатором, используемым во вложении, и в этом случае он используется для квалификации селектора.

Для общего примера:

// This Sass...
.foo {
  .bar & {
    color: red;
  }
}

// ...would compile to this CSS
.bar .foo { color:red; }

В вашем примере объявление mixin заменяет .foo и будет выглядеть следующим образом:

// If you called your mixin at .bar
.bar {
  @include myMixin {
    color: red;
  }
}

// It should compile to something like this
:global(.rtl) .bar { color: red; }

Подробнее о амперсандах и квалифицирующие селекторы в этой статье CSS Tricks .

0
ответ дан code and pixels 11 April 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: