目前写的分组函数都是对象中的无参函数,比如Something::getName, Something::getCity之类的,定义的getName和getCity必须都是无参函数,如果想根据某个参数来调整返回值,在stream的groupingBy中调用的Something::getName就会报错(实际参数列表和形式参数列表长度不符)。请教应该处理带有参数的函数,用于分组呢?
调试欢乐多
public class Test {
public static void main(String[] args) {
List<Item> ll = new ArrayList<>(); ll.add(new Item("a", "shanghai"));
ll.add(new Item("a", "henan"));
ll.add(new Item("a", "hunan"));
ll.add(new Item("b", "beijing"));
ll.add(new Item("b", "tianjin"));
ll.add(new Item("c", "shanghai"));
final String prefix = "test.";
Map<String, List<Item>> map= ll.stream().collect(Collectors.groupingBy(item -> {
return item.getName(prefix);
}));
System.out.println(JSON.toJSONString(map));
}
}class Item {
private String name;
private String city;
public Item(String name, String city) {
super();
this.name = name;
this.city = city;
}
public String getName(String prefix) {
return prefix + name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}结果如下:{
"test.c":[
{
"city":"shanghai"
}
],
"test.b":[
{
"city":"beijing"
},
{
"city":"tianjin"
}
],
"test.a":[
{
"city":"shanghai"
},
{
"city":"henan"
},
{
"city":"hunan"
}
]
}因为没有name的无参get方法,所以json里面没有该字段