我這裏的示例基於簡單的邏輯轉換的java 7嵌套for循環用java 8流API
給定一個輸入列表和分組的對象的列表,其具有列表字段中,這基本上返回列表方法應該返回一個列表,其中包含grouping.list
的所有成員,如果grouping.name
匹配輸入列表中的任何字符串,或者只是將輸入字符串添加到返回列表中。
在我寫這段代碼後,我認爲它可以在Java 7中變得更簡單,並且更好地使用Java 8 Streaming API。
public class CollectorExample {
public static void main(String[] args){
List<String> input = new ArrayList<>();
input.add("foo");
input.add("bar");
input.add("foobar");
input.add("java");
List<String> list1 = new ArrayList<>();
list1.add("hello");
list1.add("world");
List<String> list2 = new ArrayList<>();
list2.add("spring");
list2.add("multi-threaded");
Grouping g1 = new Grouping("foobar",list1);
Grouping g2 = new Grouping("java",list2);
List<Grouping> groupingList = new ArrayList<>();
groupingList.add(g1);
groupingList.add(g2);
System.out.println(mapAndMerge(input,groupingList));
}
public static List<String> mapAndMerge(List<String> input, List<Grouping> groupingList){
Set<String> returnDocs = new HashSet<>();
Iterator<String> it = input.iterator();
while(it.hasNext()){
String doc = it.next();
boolean found = false;
for (Grouping lg : groupingList){
if (lg.getName().equals(doc)){
returnDocs.addAll(lg.getList());
found=true;
}
}
if (!found){
returnDocs.add(doc);
}
}
return new ArrayList<>(returnDocs);
}
}
class Grouping {
List<String> list;
String name;
public Grouping(String name, List<String> list){
this.list=list;
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
}
這輸出[spring, bar, world, foo, hello, multi-threaded]
這是正確的。 這是我嘗試過的Java 8語法,並且無法工作;
// List<String> mergedDocs =
// input.forEach(doc->
// groupingList.stream().map(g -> g.getName().equals(doc) ? e.getList() : doc).collect(Collectors.toList()));
// return mergedDocs;
請用您自己的話來解釋代碼的意圖。 –