У вас есть несколько вариантов. Самое простое - связать своих коллекционеров:
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
и т. д. и скрывает использование кортежа как удобную деталь реализации, как и любую другую коллекцию.
Удачи.
Амперсанд (& 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 .