我编写了以下程序,该程序采用IP地址和PC名称但是在打印时我只想打印IP地址而不是IP地址和PC1。以下是我的计划。
package linked;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Linked {
public static void main(String[] args) {
workPls oks = new workPls();
try {
DatagramSocket socket = new DatagramSocket(Integer.parseInt( args[0]));
socket.setSoTimeout(0);
while(true)
{
byte []buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
socket.receive(packet);
PlsWork ok = new PlsWork(packet.getAddress(),"pc1");
oks.addNode(ok);
oks.print();
}
}
catch (Exception error){
error.printStackTrace();
}
}
}
package linked;
import java.util.LinkedList;
public class workPls {
public LinkedList List= new LinkedList();
public void addNode(PlsWork st){
List.add(st);
}
public LinkedList getList(){
return List;
}
public void print(){
System.out.println(List);
}
}
我怎么能只打印出IP地址。
答案 0 :(得分:0)
为此,您需要遍历LinkedList
中的元素以访问各个字段。为了使事情更清楚,最好使用这样的泛型来声明你的类:
public class workPls {
public LinkedList<PlsWork> list = new LinkedList<>();
public void addNode(PlsWork st){
list.add(st);
}
public LinkedList<PlsWork> getList() {
return list;
}
public void print(){
for (PlsWork p: list) {
System.out.println(p.getIp());
}
}
由于您没有提供PlsWork
类源代码,我假设其中有一个名为ip
的字段和相关的getter。
您还必须根据自己的喜好格式化输出。 toString
的{{1}}方法为您做了一些格式化,但要根据需要隔离字段,您必须自己进行格式化。
我将变量名称从LinkedList
更改为List
以使用Java标准,并且不会将变量名称与list
接口混淆。
答案 1 :(得分:0)
我看到你有List
班PlsWork
。您没有在代码中包含该类,但我认为它有2个字段,我将其称为address
和hostname
。
我假设print()
方法是您尝试修复的方法。通常,在java中修改列表的最佳方法是使用流。这是方法1 。它有点拗口。 方法2 只需将列表放在适当位置并打印address
字段。
public void print() {
// Original
System.out.println(list);
// Method 1 using stream()
final List<InetAddress> addresses = list.stream().map(PlsWork::getAddress).collect(Collectors.toList());
System.out.println(addresses);
// Method 2 using the getter, but splits it across multiple newlines
list.forEach(p -> System.out.println(p.getAddress()));
}
一般来说,有一些关于你的代码的东西我会认真考虑改变,所以它尊重更好的java约定。
thisClassFormat
或ThisFieldFormat
(您的约定完全倒退)LinkedList
作为类型:return List
,以便隐藏具体类型