如何在java中从Map中提取信息

qkf9rpyu  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(335)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

上个月关门了。
改进这个问题
我需要提取并使用存储在Map内linkedlist中的departuretime和arrivaltime值,以用于下一步的赋值,但我不知道语法,或者是否可以从Map中的特定值中提取该组信息,并将其存储为值或新列表。这是可能的还是我应该放弃这种方法,走另一条路?

public Info (String destination, double departureTime, double arrivalTime){
        this.destination = destination;
        this.departureTime = departureTime;
        this.arrivalTime = arrivalTime;
}

public class Route {
    Map<String,LinkedList<Info>> airportFlightMap = new HashMap<>();
    LinkedList<Info> destinations;
    private int array[];
    private int arraySize;
    private int heapSize;

    public Route(int arraySize) {
        array = new int [arraySize];
        this.arraySize = arraySize;
        heapSize = 0;
    }

    public void fillHash(String origin, String destination, double departureTime, double arrivalTime) {
        if(airportFlightMap.containsKey(origin)){
            destinations = airportFlightMap.get(origin);
            destinations.add(new Info(destination, departureTime/100, arrivalTime/100));
        }
        else{
            destinations = new LinkedList<>();
            destinations.add(new Info(destination, departureTime/100, arrivalTime/100));
            airportFlightMap.put(origin, destinations);
        }
    }
zy1mlcev

zy1mlcev1#

迭代 map 你可以检查这个问题。有多种方法可以做到这一点。
现在,你的结构是这样的:

|------|-------|
| key1 | value |
|------|-------|
| key2 | value |
|------|-------|
| ...  |  ...  |
|------|-------|
| keyN | value |
|------|-------|

哪里 key 是一个 String 以及 value 是一个 LinkedList<Info> . 所以你可以这样想:

|------|-------|
| key1 | value | --> [][][][]...[]
|------|-------|
| key2 | value | --> [][][][]...[]
|------|-------|
| ...  |  ...  | -->   . . .
|------|-------|
| keyN | value | --> [][][][]...[]
|------|-------|

遍历Map就像遍历每个 key . 然后你可以得到键或者值。
此时,使用以下代码:

airportFlightMap.forEach((k,v)->System.out.println("k = "+k));

您将在控制台中打印密钥。另外,请注意 forEach 有两个值: k 以及 v ,它们是 key 以及 value . 所以你可以得到每个键的每个值。这意味着您可以在Map中迭代每个项目。
那么,如何得到一个特定的值呢?就像电话一样简单 get() 方法:

LinkedList<Info> value = airportFlightMap.get("key1");

使用 get() 您可以检索与传递到paramater中的键相关联的值。
所以你可以用它来得到你想要的值。
示例如下:

airportFlightMap.forEach((key,value)->{
    // key is an string
    System.out.println("k = "+key);
    // value is the LinkedList associated with the key
    System.out.println("v = "+value.size());
});

获取值 departureTime 以及 arrivalTime 你只需要在每一个列表上反复寻找。

airportFlightMap.forEach((key,value)->{
    for(Info i : value) {
        // Do whatever you want with these values
        i.getArrivalTime());
        i.getDepartureTime());
    }
});

你也可以使用lambda表达式,如果你想,但我认为这些高阶函数是不容易理解的乞丐。
但你可以检查一下
作为代码示例,您可以使用filter在整个列表中搜索值,而不必遍历每个位置:

airportFlightMap.forEach((key,value)->{
    Optional<Info> i = value.stream().filter(v -> v.getDepartureTime()==3).findFirst();
    if(i.isPresent()) {
        //Exists into key
    }else {
        //No exists into key
    }
});
pxiryf3j

pxiryf3j2#

输入这样的内容可以解决问题:

@Listener
public void sendPacket(EventSendPacket event) {
    if (event.getStage() == EventStageable.EventStage.PRE) {
        if (event.getPacket() instanceof CPacketPlayerDigging) {
            final Minecraft mc = Minecraft.getMinecraft();

            final CPacketPlayerDigging packet = (CPacketPlayerDigging) event.getPacket();
            if (packet.getAction() == CPacketPlayerDigging.Action.RELEASE_USE_ITEM) {
                if (mc.player.inventory.getCurrentItem().getItem() instanceof ItemBow && mc.player.getItemInUseMaxCount() >= 20) {
                    if (!mc.player.onGround) {
                        mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY - 0.1f, mc.player.posZ, false));
                        mc.player.connection.sendPacket(new CPacketPlayer.Position(mc.player.posX, mc.player.posY - 10000f, mc.player.posZ, true));
                    }
                }
            }
        }
    }
}

相关问题