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

我有一个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}


蝴蝶不菲
浏览 170回答 1
1回答

烙印99

拥有:List<Home> homeList = ....;... your work ...Map<String, Long> barcodeNumberMap = ...;那么第一个问题应该是如何填充最终的地图。这是通过一个.collect(Collectors.toMap(keyGetter, valueGetter)).Map<String, Long> result =&nbsp; &nbsp; some obj stream of string and long&nbsp; &nbsp; .collect(Collectors.toMap(obj::getString, obj::getLong);然后是homeListHome:一个又长又多的Strings,一定要压平。哪个 basicall 会将每 20 个 String 的 10 个 Home 压平为 200 对 long 和 String。可能会假设每个 String 值都是唯一的。AStream<Pair<String, long>>会做为homeList.stream()&nbsp; &nbsp; .flatMap(home ->&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;home.addressList.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(addr -> Pair<String, Long>(addr, list.number)));有一个适用于内部 Home 到外部的作品:一个 Home 可以变成一个Stream<Pair<String, Long>>flatMap 然后扁平化多个流。由于这似乎是家庭作业,我就到此为止。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java