lambda多个字段分组


按用户id和渠道分组。示例

 
 
import org.apache.commons.lang3.tuple.Pair;

public
static void main(String[] args) { List<FrequentlyUsedShopDTO> list = new ArrayList<>(); list.add(new FrequentlyUsedShopDTO().setChannel("W").setUserId(1).setFrequency(1)); list.add(new FrequentlyUsedShopDTO().setChannel("W").setUserId(1).setFrequency(11)); list.add(new FrequentlyUsedShopDTO().setChannel("W").setUserId(2).setFrequency(2)); list.add(new FrequentlyUsedShopDTO().setChannel("y").setUserId(1).setFrequency(3)); list.add(new FrequentlyUsedShopDTO().setChannel("y").setUserId(1).setFrequency(31)); list.add(new FrequentlyUsedShopDTO().setChannel("y").setUserId(2).setFrequency(4)); list.add(new FrequentlyUsedShopDTO().setChannel("y").setUserId(2).setFrequency(41)); list.add(new FrequentlyUsedShopDTO().setChannel("W").setUserId(3).setFrequency(5)); // 方式1 // Map<Pair<Integer, String>, List<FrequentlyUsedShopDTO>> collect = list.stream() // .collect(Collectors.groupingBy(new Function<FrequentlyUsedShopDTO, Pair<Integer, String>>() { // @Override // public Pair<Integer, String> apply(FrequentlyUsedShopDTO frequentlyUsedShopDTO) { // return Pair.of(frequentlyUsedShopDTO.getUserId(), frequentlyUsedShopDTO.getChannel()); // } // })); // 方式2 Map<Pair<Integer, String>, List<FrequentlyUsedShopDTO>> collect = list.stream(). collect(Collectors.groupingBy(user -> Pair.of(user.getUserId(), user.getChannel()), Collectors.mapping((FrequentlyUsedShopDTO m) -> m, toList()))); collect.forEach((key, value) -> { System.out.println(key.getKey() + " " + key.getValue() + " " + key.getLeft() + " " + key.getRight()); System.out.println(value); });

打印结果:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM