簡體   English   中英

如何獲取列表<Map<String,Object> &gt; 從 Hibernate 的結果集中?

[英]How to get List<Map<String,Object>> from the result set of Hibernate?

我正在使用休眠來獲得這樣的結果,

項目 ID - 123 、 111 、 134
計數 - 2 , 5 ,6

這是我的道層 -

@Query("SELECT project_id,COUNT(*) FROM lead_master WHERE vendor_id = ?1 and source = 'share' group by project_id ")
List<Map<String,Object>> getProjectLead(userId); 

輸出 - 我想要地圖列表,其中 project_id 應該是鍵,計數應該是與該鍵關聯的對象。所以它會像 -

123 - 2
111 - 5
134 - 6

您可以ResultTransformer使用ResultTransformer

(List<Map<String, Object>>) entityManager.createNativeQuery(
    "SELECT project_id, COUNT(*) FROM lead_master WHERE vendor_id = :userId and source = 'share' group by project_id "
)
    .setParameter("userId", userId)
    .unwrap(org.hibernate.query.Query.class)
    .setResultTransformer(
        new ResultTransformer() {
            @Override
            public Object transformTuple(Object[] tuple, String[] aliases) { // 2.
                return new HashMap.of((String) tuple[0], tuple[1]);
            }

            @Override
            public List transformList(List collection) {
                return collection;
            }
        }
    )
    .getResultList();

我只是簡單地從 jpa 迭代地圖列表,然后獲取 project_id、count 的值,然后使用新地圖存儲鍵和值。我希望它會幫助你。

Map<String,Object> map=new HashMap<>();
        List<Map<String, Object>> res = samplerepository.getProjectLead(userId);
        res.forEach(action -> {
            String key = (String) action.get("project_id");
            BigInteger value = (BigInteger) action.get("count");                
            map.put(key, value);
        });
        System.out.println("size : " + map.toString());   

        Output will be :: {111=5, 123=2, 134=6}

謝謝,

如何創建列表<object>帶有字段字符串和 Map <string, set<string> &gt; 從另一個列表<object2><div id="text_translate"><p> Class Object2具有標准的 getter 並具有String字段folder 、 file和version 。 它被命名為SourceInfo</p><p> List&lt;SourceInfo&gt; source包含上面提到的三個字段。</p><p> 我的目標是從List&lt;SourceInfo&gt;創建一個List&lt;Info&gt; &gt; 。</p><p> 新List的 class 為Info ,如下圖所示。</p><pre> public class Info { private final String folder; private final Map&lt;String, Set&lt;String&gt;&gt; file; public static Builder builder() { return new Builder(); } public static Builder builder(Info info) { return new Builder(info); } private Info(Builder builder) { this.folder = builder.folder; this.file = builder.file; } public String getFolder() { return folder; } public Map&lt;String, Set&lt;String&gt;&gt; getFile() { return file; } // autogenerated toString, hashCode, and equals public static class Builder { private String folder; private Map&lt;String, Set&lt;String&gt;&gt; file; private Builder() {} private Builder(Info info) { this.folder = info.folder; this.file = info.file; } public Builder with(Consumer&lt;Builder&gt; consumer) { consumer.accept(this); return this; } public Builder withFolder(String folder) { this.folder = folder; return this; } public Builder withFile(Map&lt;String, Set&lt;String&gt;&gt; file) { this.file = file; return this; } public Info build() { return new Info(this); } }</pre><p> 到目前為止,我嘗試的是在構建器模式中創建一個集合。</p><pre> List&lt;SourceInfo&gt; source; // error: gc overhead limit exceeded List&lt;Info&gt; infoList = source.stream().map(e -&gt; Info.builder().withFolder(e.getFolder()).withFile(source.stream().collect(Collectors.groupingBy(SourceInfo::getKey, Collectors.mapping(SourceInfo::getVersion, Collectors.toSet())))).build()).collect(Collectors.toList()); Map&lt;String, Set&lt;String&gt;&gt; map = source.stream().collect(Collectors.groupingBy(SourceInfo::getKey, Collectors.mapping(SourceInfo::getVersion, Collectors.toSet()))); List&lt;Info&gt; info = source.stream().map(e -&gt; Info.builder().withFolder(e.getFolder()).withFile(map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))).build()).collect(Collectors.toList());</pre><p> 所需的 output。 以下語法可能已關閉。</p><pre> // [String, Map&lt;String, Set&lt;String&gt;&gt;] Info [folder, [key=file [value=version]]]...</pre><p> 我是 Java 的新手,不勝感激。</p><p> 我想了解如何使用 java8 和 for 循環來做到這一點。</p><p> 謝謝你。</p></div></object2></string,></object>

[英]How to create a List<Object> with fields String and Map<String, Set<String>> from another List<Object2>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 休眠:如何返回地圖 <String, List<Object> &gt; 如何堅持地圖 <String, List<Object> &gt;在Hibernate中 如何創建列表<object>帶有字段字符串和 Map <string, set<string> &gt; 從另一個列表<object2><div id="text_translate"><p> Class Object2具有標准的 getter 並具有String字段folder 、 file和version 。 它被命名為SourceInfo</p><p> List&lt;SourceInfo&gt; source包含上面提到的三個字段。</p><p> 我的目標是從List&lt;SourceInfo&gt;創建一個List&lt;Info&gt; &gt; 。</p><p> 新List的 class 為Info ,如下圖所示。</p><pre> public class Info { private final String folder; private final Map&lt;String, Set&lt;String&gt;&gt; file; public static Builder builder() { return new Builder(); } public static Builder builder(Info info) { return new Builder(info); } private Info(Builder builder) { this.folder = builder.folder; this.file = builder.file; } public String getFolder() { return folder; } public Map&lt;String, Set&lt;String&gt;&gt; getFile() { return file; } // autogenerated toString, hashCode, and equals public static class Builder { private String folder; private Map&lt;String, Set&lt;String&gt;&gt; file; private Builder() {} private Builder(Info info) { this.folder = info.folder; this.file = info.file; } public Builder with(Consumer&lt;Builder&gt; consumer) { consumer.accept(this); return this; } public Builder withFolder(String folder) { this.folder = folder; return this; } public Builder withFile(Map&lt;String, Set&lt;String&gt;&gt; file) { this.file = file; return this; } public Info build() { return new Info(this); } }</pre><p> 到目前為止,我嘗試的是在構建器模式中創建一個集合。</p><pre> List&lt;SourceInfo&gt; source; // error: gc overhead limit exceeded List&lt;Info&gt; infoList = source.stream().map(e -&gt; Info.builder().withFolder(e.getFolder()).withFile(source.stream().collect(Collectors.groupingBy(SourceInfo::getKey, Collectors.mapping(SourceInfo::getVersion, Collectors.toSet())))).build()).collect(Collectors.toList()); Map&lt;String, Set&lt;String&gt;&gt; map = source.stream().collect(Collectors.groupingBy(SourceInfo::getKey, Collectors.mapping(SourceInfo::getVersion, Collectors.toSet()))); List&lt;Info&gt; info = source.stream().map(e -&gt; Info.builder().withFolder(e.getFolder()).withFile(map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))).build()).collect(Collectors.toList());</pre><p> 所需的 output。 以下語法可能已關閉。</p><pre> // [String, Map&lt;String, Set&lt;String&gt;&gt;] Info [folder, [key=file [value=version]]]...</pre><p> 我是 Java 的新手,不勝感激。</p><p> 我想了解如何使用 java8 和 for 循環來做到這一點。</p><p> 謝謝你。</p></div></object2></string,></object> 如何從Map中獲取值 <String List<Object> &gt; 如何獲取地圖<String, List<Object> &gt; 來自 Java 8 中的流 如何映射地圖 <String, List<String> &gt;在休眠狀態 如何返回List <Map<String, Object> &gt;使用Hibernate 如何在Hibernate中獲得結果集 SpringBoot / Java:如何計算項目並在對象映射中獲取結果<String,Map<String, Map<String,Long> &gt;&gt; 如何從地圖對象獲取列表值
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM