2017-12-27 160 views
5

मैं वर्ग:जावा 8 और स्ट्रिंगजॉइनर का उपयोग करके मैं दो फ़ील्ड को सूची से कैसे जोड़ सकता हूं?

public class Item { 

    private String first; 
    private String second; 

    public Item(String first, String second) { 
     this.first = first; 
     this.second = second; 
    } 
} 

और इस तरह की वस्तुओं की सूची:

List<Item> items = asList(new Item("One", "Two"), new Item("Three", "Four")); 

मेरा लक्ष्य तत्वों की सूची में शामिल होने के लिए निम्न स्ट्रिंग का निर्माण करना है:

One: Two; Three: Four; 

मैं मैंने स्ट्रिंगजॉइनर का उपयोग करने की कोशिश की, लेकिन ऐसा लगता है कि इसे कुछ सरल प्रकारों की सूची के साथ काम करने के लिए डिज़ाइन किया गया है।

उत्तर

9

आप ऐसा ही कुछ करने की कोशिश कर सकते हैं:

final String result = items.stream() 
     .map(item -> String.format("%s: %s", item.first, item.second)) 
     .collect(Collectors.joining("; ")); 

के रूप में assylias नीचे दी गई टिप्पणी में उल्लिखित, पिछले ; इस निर्माण का उपयोग कर चूक जाएगा। इसे अंतिम स्ट्रिंग में मैन्युअल रूप से जोड़ा जा सकता है या आप केवल एसिलीयस द्वारा सुझाए गए समाधान का प्रयास कर सकते हैं।

+1

आप पिछले 'याद करेंगे,' – assylias

+0

आप उस के लिए उपसर्ग/प्रत्यय अधिभार उपयोग कर सकते हैं। – shmosel

+0

@ वासिलियास आप सही हैं, पकड़ने के लिए धन्यवाद! –

10

आप एक स्ट्रिंग है क्षेत्रों संयोजित और फिर आइटम शामिल होने के लिए आइटम मैप कर सकते हैं, उन्हें एक स्थान के साथ अलग:

String result = items.stream() 
        .map(it -> it.field1 + ": " + it.field2 + ";") 
        .collect(Collectors.joining(" ")); 
+0

धन्यवाद एक बहुत))) – Marian

2

पहला चरण field1 और field2 में शामिल होना है।

दूसरा चरण ; के साथ जुड़ना है।

ध्यान दें कि यह अंत में ; नहीं जोड़ देगा।

List<Item> items = asList(new Item("One", "Two"), new Item("Three", "Four")); 

String joined = items.stream() 
     // First step 
     .map(it -> it.field1 + ": " + it.field2) 
     // Second step 
     .collect(Collectors.joining("; ")); 

कुछ अधिक OO

या बेहतर अभी तक: इस कदम तर्क एक समर्पित विधि के लिए field1 और field2 शामिल होने के लिए:

public static class Item { 
    private String field1; 
    private String field2; 

    public Item(String field1, String field2) { 
     this.field1 = field1; 
     this.field2 = field2; 
    } 

    public String getField1And2() { 
     return field1 + ": " + field2; 
    } 

} 

और का उपयोग करें कि धारा में से एक है।

String joined = items.stream() 
     .map(Item::getField1And2) 
     .collect(Collectors.joining("; ")); 
+0

बहुत बहुत धन्यवाद))) – Marian

संबंधित मुद्दे

 संबंधित मुद्दे