由Java 8 lambda更新hashmap中的对象

问题描述 投票:-1回答:1

我创建了一个名为玩家的物品,如下所示:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

public class player implements Comparable <player> {

 int PlayerId ; 
 String name ;
 double salary;

public player(int PlayerId) {
    this.PlayerId = PlayerId;
}


public void setPlayerId(int PlayerId) {
    this.PlayerId = PlayerId;
}


public void setName(String name) {
    this.name = name;
}

public void setSalary(double salary) {
    this.salary = salary;
}

public int getID() {
    return PlayerId;
}

public String getName() {
    return name;
}

public double getSalary() {
    return salary;
}


  @Override
   public int hashCode() {

    int key = 2;

    return key=2*key+PlayerId;
   }

   @Override
   public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final player other = (player) obj;
    if (this.PlayerId != other.PlayerId) {
        return false;
    }
    return true;
   }


   @Override
    public String toString(){

   return hashCode()+" "+getID() +" "+getName()+" "+getSalary();

  }

  // generic method StoreplayerDetails
  public <T> void StoreplayerDetails( HashMap<Integer,T> inputMap ) {
  // save elements into text file

  PrintWriter pw = null;
     try {
         pw = new PrintWriter(new FileOutputStream("OutPut.txt"));
         for(T  element : inputMap.values())
             pw.println(element);
         pw.close();
     } catch (FileNotFoundException ex) {
         Logger.getLogger(MainProgram.class.getName()).log(Level.SEVERE, null, ex);
     } finally {
         pw.close();
     }
 }

@Override
public int compareTo(player other) {
    if(this.salary>other.salary)
    return 1;
else
    if(this.salary<other.salary)
        return -1;
return 0;  
}

 public interface Update  {

 public <T> void updateSalaries( HashMap<Integer,player> inputMap); 

}

}

在玩家类中创建一个名为update的接口,在该接口中创建一个名为updateSalaries的通用方法,该方法将HashMap作为输入,并在通过将每个玩家的薪水加500来更新玩家的薪水之后返回玩家对象队列。在mainprogram类中,将方法updatealaries实现为lamdba表达式。在mainprogram类中,打印返回队列中的元素。

我尝试如下,但没有成功:

@Override
public <T> void updateSalaries(HashMap<Integer, player> map) {

 map.replaceAll((k,player.getSalary()) -> player.getSalary()+500;

  System.out.println("new map"+map);



}

这是主类中的完整代码

 import java.util.HashMap;
 import player.player.Update;

 public class MainProgram implements Update{


public static void main(String[] args) {

 HashMap< Integer,player> Keys = new HashMap<>();

 player p1 =new player(1);
 p1.setName("Ali");
 p1.setSalary(5000);

 player p2 =new player(2);
 p2.setName("Sayed");
 p2.setSalary(7000);

 player p3 =new player(3);
 p3.setName("soha");
 p3.setSalary(3000);

 Keys.put(1, p1);
 Keys.put(2, p2);
 Keys.put(3, p3);


  // p1.StoreplayerDetails(Keys);
   MainProgram m = new MainProgram();

   m.updateSalaries(Keys);


}

@Override
public <T> void updateSalaries(HashMap<Integer, player> map) {

 map.replaceAll((k,player.getSalary()) -> player.getSalary()+500;

  System.out.println("new map"+map);



}



}

解决这个问题有帮助吗?

java lambda interface hashmap implements
1个回答
0
投票

在您的代码段中,您具有以下代码行:

map.replaceAll((k,player.getSalary()) -> player.getSalary()+500;

让我们一步一步地分开:

  1. map.replaceAll此方法使您可以替换映射中的所有值。我相信您想改用已经存在的值。
  2. (k,player.getSalary())在这里,您可以命名lambda将值转储到的变量。您不应该在此处提供电话号码,应该在接收电话号码。您可能需要(k, p),其中k将设置为键(Integer),而p将设置为值(player)。
  3. player.getSalary()+500这将返回intreplaceAll方法要求您返回值类型,在这种情况下为player
  4. 您忘了在结尾处加上一个短括号。

我相信您想改用此行代码,这可以减轻上述所有错误:

map.forEach((k, p) -> p.setSalary(p.getSalary() + 500));
© www.soinside.com 2019 - 2024. All rights reserved.