Как сделать правильную группу столбцов для вложенных групп в ssrs?

Вы можете:

  1. Использовать карту, которая имеет список в качестве значения. Map<KeyType, List<ValueType>>.
  2. Создайте новый класс-оболочку и поместите экземпляры этой обертки на карту. Map<KeyType, WrapperType>.
  3. Используйте класс, подобный кортежу (сохраняет создание множества оболочек). Map<KeyType, Tuple<Value1Type, Value2Type>>.
  4. Используйте параллельные карты бок о бок.

Примеры

1. Карта со списком как значение

// create our map
Map<string, List<Person>> peopleByForename = new HashMap<string, List<Person>>();    

// populate it
List<Person> people = new ArrayList<Person>();
people.add(new Person("Bob Smith"));
people.add(new Person("Bob Jones"));
peopleByForename.put("Bob", people);

// read from it
List<Person> bobs = peopleByForename["Bob"];
Person bob1 = bobs[0];
Person bob2 = bobs[1];

Недостатком такого подхода является то, что список не привязан к точно двум значениям.

2. Использование класса-оболочки

// define our wrapper
class Wrapper {
    public Wrapper(Person person1, Person person2) {
       this.person1 = person1;
       this.person2 = person2;
    }

    public Person getPerson1 { return this.person1; }
    public Person getPerson2 { return this.person2; }

    private Person person1;
    private Person person2;
}

// create our map
Map<string, Wrapper> peopleByForename = new HashMap<string, Wrapper>();

// populate it
Wrapper people = new Wrapper()
peopleByForename.put("Bob", new Wrapper(new Person("Bob Smith"),
                                        new Person("Bob Jones"));

// read from it
Wrapper bobs = peopleByForename["Bob"];
Person bob1 = bobs.Person1;
Person bob2 = bobs.Person2;

Недостатком такого подхода является то, что вам нужно написать много кода котельной для всех этих очень простых классов контейнеров.

3. Использование кортежа

// you'll have to write or download a Tuple class in Java, (.NET ships with one)

// create our map
Map<string, Tuple2<Person, Person> peopleByForename = new HashMap<string, Tuple2<Person, Person>>();

// populate it
peopleByForename.put("Bob", new Tuple2(new Person("Bob Smith",
                                       new Person("Bob Jones"));

// read from it
Tuple<Person, Person> bobs = peopleByForename["Bob"];
Person bob1 = bobs.Item1;
Person bob2 = bobs.Item2;

Это лучшее решение, на мой взгляд.

4. Несколько карт

// create our maps
Map<string, Person> firstPersonByForename = new HashMap<string, Person>();
Map<string, Person> secondPersonByForename = new HashMap<string, Person>();

// populate them
firstPersonByForename.put("Bob", new Person("Bob Smith"));
secondPersonByForename.put("Bob", new Person("Bob Jones"));

// read from them
Person bob1 = firstPersonByForename["Bob"];
Person bob2 = secondPersonByForename["Bob"];

Недостатком этого решения является то, что не очевидно, что эти две карты связаны, программная ошибка может видеть, что две карты выходят из синхронизации.

0
задан Dale Burrell 18 March 2019 в 22:21
поделиться