我创建了一个名为玩家的物品,如下所示:
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);
}
}
解决这个问题有帮助吗?
在您的代码段中,您具有以下代码行:
map.replaceAll((k,player.getSalary()) -> player.getSalary()+500;
让我们一步一步地分开:
map.replaceAll
此方法使您可以替换映射中的所有值。我相信您想改用已经存在的值。(k,player.getSalary())
在这里,您可以命名lambda将值转储到的变量。您不应该在此处提供电话号码,应该在接收电话号码。您可能需要(k, p)
,其中k
将设置为键(Integer
),而p
将设置为值(player
)。player.getSalary()+500
这将返回int
。 replaceAll
方法要求您返回值类型,在这种情况下为player
。我相信您想改用此行代码,这可以减轻上述所有错误:
map.forEach((k, p) -> p.setSalary(p.getSalary() + 500));