Java 8 中的stream分组函数能否带参数呢

zheyimiao 2019-01-24 01:40:37
目前写的分组函数都是对象中的无参函数,比如Something::getName, Something::getCity之类的,定义的getName和getCity必须都是无参函数,如果想根据某个参数来调整返回值,在stream的groupingBy中调用的Something::getName就会报错(实际参数列表和形式参数列表长度不符)。请教应该处理带有参数的函数,用于分组呢?
...全文
828 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
飘落的秋风 2019-02-13
  • 打赏
  • 举报
回复
你可以不直接用Something::getName这种方式来获取Function对象,你可以参考下面的代码看下

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里面没有该字段

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧