用Java8Lambda更新hashmap中的对象
我创建了一个名为player的项目,如下所示:用Java8Lambda更新hashmap中的对象,java,lambda,interface,hashmap,implements,Java,Lambda,Interface,Hashmap,Implements,我创建了一个名为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 Comp
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);
}
}
import java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.PrintWriter;
导入java.util.HashMap;
导入java.util.logging.Level;
导入java.util.logging.Logger;
公共类播放器实现了可比较的{
int PlayerId;
字符串名;
双薪;
公共玩家(int玩家ID){
this.PlayerId=PlayerId;
}
public void setPlayerId(int PlayerId){
this.PlayerId=PlayerId;
}
公共void集合名(字符串名){
this.name=名称;
}
公共收入(双倍工资){
这个。薪水=薪水;
}
公共int getID(){
返回PlayerId;
}
公共字符串getName(){
返回名称;
}
公共双薪制{
返回工资;
}
@凌驾
公共int hashCode(){
int键=2;
返回键=2*键+播放器ID;
}
@凌驾
公共布尔等于(对象obj){
if(obj==null){
返回false;
}
如果(getClass()!=obj.getClass()){
返回false;
}
最终玩家其他=(玩家)obj;
if(this.PlayerId!=其他.PlayerId){
返回false;
}
返回true;
}
@凌驾
公共字符串toString(){
返回hashCode()+“”+getID()+“”+getName()+“”+getSalary();
}
//泛型方法StoreplayerDetails
public void StoreplayerDetails(HashMap inputMap){
//将元素保存到文本文件中
PrintWriter pw=null;
试一试{
pw=新的PrintWriter(新的FileOutputStream(“OutPut.txt”);
for(T元素:inputMap.values())
pw.println(元素);
关闭();
}捕获(FileNotFoundException ex){
Logger.getLogger(MainProgram.class.getName()).log(Level.SEVERE,null,ex);
}最后{
关闭();
}
}
@凌驾
公共整数比较(其他玩家){
如果(本次薪资>其他薪资)
返回1;
其他的
如果(this.salary在代码段中有以下代码行:
map.replaceAll((k,player.getSalary()) -> player.getSalary()+500;
让我们一块一块地把它拆开:
map.replaceAll
此方法允许您替换映射中的所有值。我相信您希望操作已经存在的值
(k,player.getSalary())
这是命名lambda将值转储到其中的变量的地方。您不应该在这里提供数字,而是应该接收数字。您可能希望(k,p)
,其中k
将设置为键(一个整数
)将p
设置为该值(aplayer
)
player.getSalary()+500
返回一个int
。replaceAll
方法要求返回值类型,在本例中为player
你忘了在结尾加上一个右括号
我相信您希望改用这行代码,这将减轻上述所有错误:
map.forEach((k, p) -> p.setSalary(p.getSalary() + 500));
你确定你的代码可以编译吗?这看起来很可疑map.replaceAll((k,player.getSalary())->player.getSalary()+500;
你可能想要for(player p:map.values())p.setSalary(p.getSalary()+500)
非常感谢你,它在@user上运行得很好
map.replaceAll((k,player.getSalary()) -> player.getSalary()+500;
map.forEach((k, p) -> p.setSalary(p.getSalary() + 500));