当它们存储在一起时,如何从链表中打印特定的东西

时间:2018-04-08 13:56:30

标签: java

我编写了以下程序,该程序采用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地址。

2 个答案:

答案 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)

我看到你有ListPlsWork。您没有在代码中包含该类,但我认为它有2个字段,我将其称为addresshostname

我假设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约定。

  • 阅读并实施任何标准的Java格式
  • 不要使用大写约定thisClassFormatThisFieldFormat(您的约定完全倒退)
  • 声明集合类的泛型
  • 不要返回LinkedList作为类型:return List,以便隐藏具体类型