为了账号安全,请及时绑定邮箱和手机立即绑定

Java Stream Api 逆向数据结构与规范化变量

Java Stream Api 逆向数据结构与规范化变量

蝴蝶不菲 2023-03-02 10:15:35
我有一个Home类。有一个此类的数组,我必须像Map<AddressList, Number>使用 java stream api 一样转换此数据结构。Number对于同一对象中的每个地址,值将重复Home。我该怎么做?谢谢。class Home {    private Long number;    private List<String> addressList;    // getters, setters, constructor}class AnotherClass {    List<Home> homeList = ....;    // do something here and result    Map<String, Long> barcodeNumberMap = ...;}解决方案感谢您的回复。最后代码;public void test() {    List<Home> homeList = new ArrayList<>();    Home h = new Home();    List<String> barcode1List = new ArrayList<String>();    barcode1List.add("b11");    barcode1List.add("b12");    h.setBarcodeList(barcode1List);    h.setNumber(100L);    Home h2 = new Home();    List<String> barcode2List = new ArrayList<String>();    barcode2List.add("b21");    barcode2List.add("b22");    h2.setBarcodeList(barcode2List);    h2.setNumber(200L);    homeList.add(h);    homeList.add(h2);    Map<String, Long> resultMap = homeList.stream()        .flatMap(home -> home.getBarcodeList().stream()            .map(addr -> new SimpleEntry<String, Long>(addr, home.getNumber())))        .collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));    System.out.println(resultMap);    }和输出:{b21=100, b12=200, b11=200, b22=100}
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

拥有:


List<Home> homeList = ....;

... your work ...

Map<String, Long> barcodeNumberMap = ...;

那么第一个问题应该是如何填充最终的地图。这是通过一个.collect(Collectors.toMap(keyGetter, valueGetter)).


Map<String, Long> result =

    some obj stream of string and long

    .collect(Collectors.toMap(obj::getString, obj::getLong);

然后是homeListHome:一个又长又多的Strings,一定要压平。哪个 basicall 会将每 20 个 String 的 10 个 Home 压平为 200 对 long 和 String。可能会假设每个 String 值都是唯一的。


AStream<Pair<String, long>>会做为


homeList.stream()

    .flatMap(home ->

         home.addressList.stream()

                          .map(addr -> Pair<String, Long>(addr, list.number)));

有一个适用于内部 Home 到外部的作品:一个 Home 可以变成一个Stream<Pair<String, Long>>flatMap 然后扁平化多个流。


由于这似乎是家庭作业,我就到此为止。


查看完整回答
反对 回复 2023-03-02
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号