我这里的示例基于简单的逻辑转换的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;
请用您自己的话来解释代码的意图。 –