2015-05-14 3 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).

Вы также можете использовать переменную servername вместо downserver.get(i) в методе sendMail.

Проверьте, если вы получаете NullPointerException или другое исключение.

Смежные вопросы