[英]merging 2 lists into 1 list by mapping
我有兩個列表,每個列表包含來自sql查詢的行,包含2個元素(列)運算符和id我想用兩個列表映射運算符並從列表中打印id(兩個列表中的id對應於運算符)
在這種情況下,操作員不能成為關鍵。
**List 1** **Lists 2**
operator1, id1 operator4, id7
operator1, id2 operator3, id8
operator2, id3 operator2, id9
operator2, id4 operator2, id10
operator3, id5 operator1, id11
operator4, id6 operator1, id12
最終輸出應該是這樣的
**List3**
operator1, id1,id2,id11,id12
operator2, id3,id4,id9,id11
operator3, id5,id8
operator4, id6,id7
我能以什么方式實施?
而不是List3創建一個地圖作為目標源。 Map將以操作符作為鍵,以逗號分隔的ID作為值。
最簡單的方法是使用Map按運算符分組。實際上,您可以使用Map而不是List,但您也可以迭代map以附加鍵和值並將它們插回列表。 您可以使用以下代碼來實現所需的結果。
public static void main(String[] args) {
List<Object> list1 = new ArrayList<Object>();
list1.add("operator1, id1");
list1.add("operator1, id2");
list1.add("operator2, id3");
list1.add("operator2, id4");
list1.add("operator3, id5");
list1.add("operator4, id6");
List<Object> list2 = new ArrayList<Object>();
list2.add("operator4, id7");
list2.add("operator3, id8");
list2.add("operator2, id9");
list2.add("operator2, id10");
list2.add("operator1, id11");
list2.add("operator1, id12");
Map<String, String> map = new HashMap<String, String>();
List<Object> list3 = new ArrayList<Object>();
Iterator<Object> it1 = list1.iterator();
Iterator<Object> it2 = list2.iterator();
while (it1.hasNext() && it2.hasNext()) {
String[] line1 = ((String) it1.next()).split(",");
map.put(line1[0], map.get(line1[0]) == null ? line1[1] : map.get(line1[0]) + ", " + line1[1]);
String[] line2 = ((String) it2.next()).split(",");
map.put(line2[0], map.get(line2[0]) == null ? line2[1] : map.get(line2[0]) + ", " + line2[1]);
}
for (Map.Entry<String, String> entry : map.entrySet()) {
String item = entry.getKey() + "," + entry.getValue();
System.out.println(item);
list3.add(item);
}
}
運行上面的代碼后,結果將是:
operator4, id6, id7
operator1, id1, id2, id11, id12
operator3, id5, id8
operator2, id3, id4, id9, id10
一種稍微緊湊且可能有用的方法:
Map<String, List<String>> map = new HashMap<String, List<String>>();
for ( List<String> list : lists ) // List1 and List2 specifically
{
for ( String s : list )
{
if ( map.get( getOperator( s ) ) == null )
{
map.put( getOperator( s ) , new ArrayList<String>() );
}
map.get( getOperator( s ) ).add( getId( s );
}
}
map.entrySet(); // will be a more useful version of your List3
方法getOperator( String )
和getId( String )
顯而易見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.