2015-05-14 29 views
-1

我检查服务器中的每一分钟“N”号码,如果任何服务器停机邮件触发与已关闭的服务器名称的用户。我面临的问题是,如果多台服务器关闭,我只能得到一个服务器名称关闭。如何获取所有关闭的服务器的名称。而得到更多的价值,并显示它

obj = dataAccess.getServers(); //getting the status and links of all servers 
    MailServer sender = new MailServer(From,Password);   
    List<String> downserver = new ArrayList(); 
    for (Map<String, String> objs : obj) { //Iterating for each server 
       serverstatus = objs.get("status"); 
       if (serverstatus.equals("DOWN")) { 
        servername = objs.get("name"); 
        statusserver=objs.get("status"); 
       } 

    downserver.add(servername); 
    if(!(servername.equals(null))){ 
     sender.sendMail("Server Status",downserver.get(i),From,To) 
    } 
+0

转换的'List'到['Stream'](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html)。调用'filter'选择关闭的服务器,'map'将服务器转换为服务器名称。 –

回答

1

,不检查你的代码的合理性,或试图改善什么,你的代码应该看起来有点更像以下(至少)接近你正在尝试:

servers = dataAccess.getServers(); 
MailServer sender = new MailServer(From,Password); 

List<String> downservers = new ArrayList(); 
for (Map<String, String> server : servers) { 
    serverstatus = server.get("status"); 
    servername = server.get("name"); 
    if (serverstatus.equals("DOWN") && servername != null) { 
     downservers.add(servername); 
    } 
} 

StringBuilder sb = new StringBuilder(); 
String sep = ""; 
for (server : downservers) { 
    sb.Append(sep).Append(server); 
    sep = ", "; 
} 
sender.sendMail("Server Status", sb.ToString(), From, To); 

或短的一个迭代:

MailServer sender = new MailServer(From,Password); 
StringBuilder sb = new StringBuilder(); 
String sep = ""; 
for (Map<String, String> server : dataAccess.getServers()) { 
    String servername = server.get("name"); 
    if (server.get("status").equals("DOWN") && servername != null) { 
     sb.Append(sep).Append(servername); 
     sep = ", "; 
    } 
} 
sender.sendMail("Server Status", sb.ToString(), From, To); 
+0

如果我按照自己的方式尝试,如果n台服务器关闭,将触发n个邮件。我想只触发一个包含所有服务器名称的邮件 – san9194

+0

相应地更新了我的答案 – Markus

0

如果你想要做一个字符串null检查,你不应该做servername.equals(null),如果服务器名称为空,它抛出一个NullPointerException。您可以使用if (servername != null)

您还可以使用变量,而不是服务器名的downserver.get(i) Sendmail中的方法。

检查,如果你正在NullPointerException或一些其他异常。