Scala создает группу элементов

Я хочу создать группу элементов в сообщении, как показано на изображении ниже.

введите здесь описание изображения

Обновлено:

 case class Element(key:String;value:String)

Сообщение может быть представлено примерно так, как показано ниже

 case class Msg(field1:Element,field2:Group)

Group->представляет повторяющуюся группу — мне нужна помощь, чтобы определить группу и подгруппы

Элемент определяет комбинацию key=value, которая повторяется в группах.

Ниже приведены некоторые моменты

  1. Являются ли атрибуты «поля» FixMessage?

    -Да, это атрибуты сообщения об исправлении, и каждое поле представлено как case class Element(key:String;value:String)

  2. Повторяющаяся группа, они Element повторяются ни разу

  3. Все ли ключи и значения являются строками?

    -Считайте их строкой на данный момент

  4. Поле N (поле 1, поле 2 и т. д.) представляет разные типы?

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

Выход :

key2=value2 ;key3=value3;key4=value=4;key3=value3;key4=value=4;key2=value‌​ e2;key3=value3;key‌​4=value4;key3=value‌​3;key4=value4

Объяснение

Группа key2=value2 повторяется 2 раза. Подгруппа key3=value3;key4=value=4;key3=value3;key4=value=4 повторяется 2 раза в каждой группе (key2=value2) соответственно.


person coder25    schedule 18.08.2017    source источник
comment
@GhostCat, надеюсь, теперь немного ясно   -  person coder25    schedule 18.08.2017
comment
@jwvh спасибо, так что для достижения моей цели перечислить ... какой возможный подход мне следует использовать. Я расширяю все свои классы с помощью группы признаков и добавляю элемент в список   -  person coder25    schedule 18.08.2017
comment
Кстати, этот вопрос на самом деле хуже предыдущего. Непонятно, какова конечная цель. Непонятно, как пример кода java решает заявленную проблему (или даже его отношение к проблеме). И имена типов настолько общие (Type1, Type2), что они не дают никакого намека на то, каково фактическое намерение.   -  person Alvaro Carrasco    schedule 18.08.2017
comment
@AlvaroCarrasco надеюсь, теперь это прояснится   -  person coder25    schedule 19.08.2017
comment
@ code25 Не совсем. Вы представляете иерархию с некоторыми ярлыками, но все еще не ясно, что они должны представлять. Являются ли поля атрибутами FixMessage? являются ли они атрибутами конкретной RepeatingGroup? является RepeatingGroup отдельным объектом или списком групп? Все ли ключи и значения являются строками? поле N (поле 1, поле 2 и т. д.) представляет разные типы? или они представляют имена разных атрибутов, которые имеют один и тот же тип?   -  person Alvaro Carrasco    schedule 19.08.2017
comment
@ code25 Вы изучили подход, используемый этой библиотекой? github.com/mhotchen/fix-protocol (при условии, что это интересующий вас домен)   -  person Alvaro Carrasco    schedule 19.08.2017
comment
@ Альваро Карраско да, но он не сталкивается с групповой частью. У меня проблема с группировкой.   -  person coder25    schedule 19.08.2017
comment
Я не уверен, что непонятно в вопросе, может ли кто-нибудь объяснить мне, чтобы я мог его улучшить   -  person coder25    schedule 19.08.2017
comment
Давайте продолжим обсуждение в чате.   -  person coder25    schedule 19.08.2017
comment
@AlvaroCarrasco Я ответил на ваши вопросы. Надеюсь, теперь это прояснит вопрос.   -  person coder25    schedule 19.08.2017
comment
@Юваль Ицчаков, не могли бы вы помочь мне в этом вопросе?   -  person coder25    schedule 19.08.2017


Ответы (1)


Если я правильно понимаю домен, должно работать что-то вроде этого:

case class Message(entries: List[Entry])

case class Entry(name: String, value: Value)
trait Value
object Value {
  case class Single (v: String) extends Value
  case class Group (entries: List[List[Entry]]) extends Value
}

Message(
  Entry("Key 1", Value.Single("Value 1")),
  Entry("Key 2", Value.Group(
    List(
      List(
        Entry("Key 3", Value.Single("Value 3")),
        Entry("Key 4", Value.Single("Value 4"))
      ),
      List(
        Entry("Key 3", Value.Single("Value 5")),
        Entry("Key 4", Value.Single("Value 6"))
      )
    )
  ))
)

Конечно, можно было бы создать несколько вспомогательных функций, чтобы сделать для него более удобный DSL.

person Alvaro Carrasco    schedule 18.08.2017
comment
Да, вы это ясно поняли. Но мне не нужно передавать список списка для достижения этого. Мне может потребоваться метод для добавления к нему группы и подгрупп. Но не уверен, что-то вроде trait Group{val ele = List[myType](); val grp = List[Group]()} - person coder25; 19.08.2017
comment
Я ответил на ваши вопросы. Пожалуйста, посмотрите - person coder25; 19.08.2017
comment
key2=value2 - это группа, которая может повторяться n раз... за которой следует подгруппа. - person coder25; 19.08.2017