将对象列表转换为属性映射

时间:2019-08-17 07:24:22

标签: java java-8

我有一个Traceback (most recent call last): File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 924, in _wrap_create_connection await self._loop.create_connection(*args, **kwargs)) File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 802, in create_connection sock, protocol_factory, ssl, server_hostname) File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 828, in _create_connection_transport yield from waiter File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 503, in data_received ssldata, appdata = self._sslpipe.feed_ssldata(data) File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 201, in feed_ssldata self._sslobj.do_handshake() File "C:\Program Files\Python36\lib\ssl.py", line 683, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "test2.py", line 12, in <module> loop.run_until_complete(main()) File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 466, in run_until_complete return future.result() File "test2.py", line 7, in main async with cs.get("https://www.discordapp.com") as r: File "C:\Program Files\Python36\lib\site-packages\aiohttp\client.py", line 1005, in __aenter__ self._resp = await self._coro File "C:\Program Files\Python36\lib\site-packages\aiohttp\client.py", line 476, in _request timeout=real_timeout File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 522, in connect proto = await self._create_connection(req, traces, timeout) File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 854, in _create_connection req, traces, timeout) File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 992, in _create_direct_connection raise last_exc File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 974, in _create_direct_connection req=req, client_error=client_error) File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 929, in _wrap_create_connection raise ClientConnectorSSLError(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorSSLError: Cannot connect to host www.discordapp.com:443 ssl:None [[SSL: CERTIFI CATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)] 类,具有以下一些属性

Section

现在我有一个截面对象列表,我想将该列表转换为名称和代码的映射。 我知道可以按以下常规方式进行操作。

class Section{
private String name;
private String code;
// respective getters and setters.
}

我想知道Java-8流是否有可能实现类似的目标。

3 个答案:

答案 0 :(得分:2)

不难。只需将toMap收集器与对getter的适当方法引用一起使用:

sections.stream().collect(
    Collectors.toMap(Section::getName, Section::getCode)
);

答案 1 :(得分:2)

如果没有Section元素具有相同的getCode()值:

Map<String,String> map = 
sections.stream()
        .collect(toMap(Section::getCode, Section::getName);

如果您有Section个具有相同getCode()值的元素,则前一个元素将引发IllegalStateException,因为它不接受该元素。所以你必须合并它们。
例如,要实现与实际代码相同的功能,即覆盖现有键的现有值,请使用以下重载:

toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper,
                                    BinaryOperator<U> mergeFunction)

并返回合并功能的第二个参数:

Map<String,String> map = 
sections.stream()
        .collect(toMap(Section::getCode, Section::getName, (a,b)->b);

答案 2 :(得分:0)

请在下面找到该女士的代码:

List<Section> sections= Arrays.asList(new Section("Pratik", "ABC"), new Section("Rohit", "XYZ"));


    Map<String,String> nameCodeMap =sections.stream().collect(Collectors.toMap(Section-> Section.getName(), Section-> Section.getCode()));

    nameCodeMap.forEach((k,v)-> System.out.println("Key "+ k+" "+"Value "+v));