【问题标题】:update object in hashmap by java 8 lambda通过 java 8 lambda 更新 hashmap 中的对象
【发布时间】:2020-09-20 06:12:45
【问题描述】:

我创建了一个名为 player 的项目,如下所示:

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 类中,将方法 updatesalaries 实现为 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);



}



}

在解决这个问题上有什么帮助吗?

【问题讨论】:

  • 你确定你的代码可以编译吗?这看起来很可疑map.replaceAll((k,player.getSalary()) -&gt; player.getSalary()+500;
  • 你可能想要for (player p : map.values()) p.setSalary(p.getSalary() + 500)
  • 非常感谢@user 运行良好

标签: java lambda interface hashmap implements


【解决方案1】:

在您的代码 sn-p 中,您有以下代码行:

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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2023-04-06
    相关资源
    最近更新 更多