根据条件将地图内容放入另一个地图

时间:2017-04-10 14:04:41

标签: java hashmap maps

我已经尝试过寻找这样做的方法,他们似乎无法解决我的问题。

我有一张地图:

Map<String,Element> elements = new HashMap<>();

我想把它放到另一张地图上;给出一个简单的条件:

if (key.charAt(0) == 'W') //Does the start of the key have a "W" 

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您可以使用Java 8执行以下操作:

xsi:type="tns:listProcessesReturn"

删除其密钥不以elements.keySet().removeIf(key -> !key.startsWith("W")); 开头的所有条目。

如果您想保留第一个W,只需先创建另一个Map

Map

答案 1 :(得分:1)

这对我来说很好用:

    <body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js'></script>
<script src='{% static "vendor/deckjs/core/deck.core.js" %}'></script>
<script src='{% static "vendor/deckjs/extensions/events/deck.events.js" %}'>


        <div class="deck-container">
            <section class="slide" id="pie">
                <script>
                var ctx1 = $("#NestedChart").get(0).getContext("2d");
                var myChart1 = new Chart(ctx1, {
                    type: 'doughnut',
                    data: {
                        labels: [1,2,3,4,5],        
                        datasets: [{
                            data: [10,89,4,34,33],
                        },
                        options: {
                            animation: {
                                duration:2000
                    },
            });
            })
                </script>

                <div style="position: relative; height: 500px; width:500px" class='col-sm-6'>
                    <canvas style="position:absolute; top: 0px; left: 0px" id="NestedChart" width="400" height="400"></canvas>
                </div>
           </section>
       </div>

    <script>
      $(function() {
        $.deck('.slide', {countNested: false});

        $("#pie").bind('deck.becameCurrent', function(ev, direction) {
            console.log("test chart update");
            myChart1.update();
         });
      });
    </script>
    </body>

给出以下输出:

import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String args[])
    {
        Map<String,String> elements = new HashMap<>();
        Map<String,String> elements2 = new HashMap<>();//the second map
        elements.put("A", new String("A"));
        elements.put("B", new String("B"));
        elements.put("W1", new String("W1"));
        elements.put("W2", new String("W2"));


        for (Map.Entry<String, String> entry : elements.entrySet())
        {
            if(entry.getKey().charAt(0) == 'W')
                elements2.put(entry.getKey(), entry.getValue());
        }

        for (Map.Entry<String, String> entry : elements2.entrySet())
        {
            //printing the elements of the second map
            System.out.println(entry.getKey() + "/" + entry.getValue());            
        }
    }
}

答案 2 :(得分:0)

这取决于您的用例。我假设您正在使用java 8。

如果您想要一个包含已过滤条目的新地图,您可以

Map<String,Element> newElements = elements.entrySet().stream()
    .filter(entry -> entry.getKey().startsWith("W"))
    .collect(Collectors.toMap(Entry::getKey(), Entry::getValue()));

如果您已经拥有其他地图,并且只想添加条目,则可以使用:

//assuming Map<String,Element> newElements = some appropriately initialized map
elements.entrySet().stream()
    .filter(entry -> entry.getKey().startsWith("W"))
    .forEach(entry -> newElements.put(entry.getKey(), entry.getValue());

如果您愿意,也可以将第一个选项的结果传递给第二张地图上的putAll。虽然在这种情况下我会偏向第二种选择。