रूपांतरण की एक सूची के लिए वस्तु सूची के अपने क्षेत्र

0

सवाल

मैं एक सूची है[MyObject], के साथ MyObject युक्त क्षेत्रों field1, field2 और field3.

मैं देख रहा हूँ के लिए एक कुशल तरीके से कर के :

Tuple3(_.map(_.field1), _.map(_.field2), _.map(_.field3))

जावा में मुझे क्या करना होगा की तरह कुछ :

Field1Type f1 = new ArrayList<Field1Type>();
Field2Type f2 = new ArrayList<Field2Type>();
Field3Type f3 = new ArrayList<Field3Type>();


for(MyObject mo : myObjects) {
    f1.add(mo.getField1());
    f2.add(mo.getField2());
    f3.add(mo.getField3());
}

मैं होगा की तरह कुछ और अधिक कार्यात्मक है के बाद से मैं कर रहा हूँ में स्काला लेकिन मैं कर सकते हैं पर मेरी उंगली नहीं डाल ।

scala
2021-11-23 10:53:16
2

सबसे अच्छा जवाब

3

2\3 उप-समूहों के साथ unzip\unzip3

संभालने के शुरुआती बिंदु:

val objects: Seq[MyObject] = ???

आप खोलना कर सकते हैं प्राप्त करने के लिए सभी 3 उप-समूहों:

val (firsts, seconds, thirds) =  
  objects
    .unzip3((o: MyObject) => (o.f1, o.f2, o.f3))

क्या होगा यदि मैं अधिक से अधिक 3 प्रासंगिक उप-समूहों ?

यदि आप वास्तव में जरूरत से अधिक उप-समूहों आप की जरूरत है लागू करने के लिए अपने स्वयं के unzipN हालांकि, के बजाय के साथ काम करने Tuple22 मैं व्यक्तिगत रूप से एक एडाप्टर का उपयोग करें:


case class MyObjectsProjection(private val objs: Seq[MyObject]) {
  
  lazy val f1s: Seq[String] =
    objs.map(_.f1)

  lazy val f2s: Seq[String] =
    objs.map(_.f2)

    ... 
  
  lazy val f22s: Seq[String] =
    objs.map(_.f3)
}

val objects: Seq[MyClass] = ???
val objsProjection = MyObjectsProjection(objects)

objs.f1s
objs.f2s
...
objs.f22s

नोट्स:

  • परिवर्तन MyObjectsProjection अपनी आवश्यकताओं के अनुसार.
  • इस से एक Scala 2.12\2.11 वेनिला परिप्रेक्ष्य.
2021-11-23 13:57:53

के लिए स्काला 3 उपयोगकर्ताओं: आप कर सकते हैं का लाभ उठाने के सामान्य टपल: elements.map(Tuple.fromProductTyped(_)).unzip3
gianluca aguzzi

क्या होगा अगर मैं 3 से अधिक क्षेत्रों के बाद ?
Robert Reynolds

यहां तक कि अगर MyClass अधिक क्षेत्रों का चयन कर सकते हैं सिर्फ 2\3 संबंधित क्षेत्रों के साथ unzip\unzip3. आप की जरूरत है जोड़ने के लिए अपने स्वयं के कार्यान्वयन के लिए बड़ा tuples या सिर्फ पुनर्विचार अपने एल्गोरिथ्म है । TBH काम करने के बजाय के साथ Tuple20 मैं एक मामले क्लास एडाप्टर.
gatear

मैं अद्यतन पोस्ट के साथ एक सामान्य एडाप्टर के रूप में अच्छी तरह से
gatear
2

निम्नलिखित सड़ जाएगा अपने वस्तुओं में तीन सूचियों:

case class MyObject[T,S,R](f1: T, f2: S, f3: R)

val myObjects: Seq[MyObject[Int, Double, String]] = ???

val (l1, l2, l3) = myObjects.foldLeft((List.empty[Int], List.empty[Double], List.empty[String]))((acc, nxt) => {
  (nxt.f1 :: acc._1, nxt.f2 :: acc._2, nxt.f3 :: acc._3)
})
2021-11-23 11:17:18

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में