Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在迭代的LinkedList上使用拆分器?_Java - Fatal编程技术网

Java 在迭代的LinkedList上使用拆分器?

Java 在迭代的LinkedList上使用拆分器?,java,Java,只是想知道是否可以使用拆分器类拆分从LinkedList移动到并迭代的详细信息?这是我在迭代LinkedList之前使用的初始拆分代码: Scanner input = new Scanner(new File("today.txt")); while (input.hasNextLine()) { names = input.nextLine(); if(names.contains(":"))

只是想知道是否可以使用拆分器类拆分从LinkedList移动到并迭代的详细信息?这是我在迭代LinkedList之前使用的初始拆分代码:

    Scanner input = new Scanner(new File("today.txt"));

        while (input.hasNextLine())
        { 
            names = input.nextLine();
            if(names.contains(":"))
                {
                    splitter2 = names.split(":");
                    name = splitter2[0];
                    times = splitter2[1];
                    System.out.printf("%s\t\t %s \n",name, times);

                }
            q1.add(names);  
        }
Q1是我创建的LinkedList。
是否有方法拆分迭代列表,以便我在回调新的迭代列表时只能搜索名称?

如果我理解正确,映射比链接列表更适合您的需要

您可以有一个
映射
,其中键为
名称
,值为
时间
。或者您可以有一个
映射
,其中键是包含从该行读取的数据的某个对象的名称和值

然后,您可以拥有以下内容,而不是
q1.添加(名称)

Map<String,String> map = new HashMap<>();
...
while (input.hasNextLine()) {
    ...
    map.put (name,times);
    ...
}
Map Map=newhashmap();
...
while(input.hasNextLine()){
...
map.put(名称、时间);
...
}

Map Map=newhashmap();
...
while(input.hasNextLine()){
...
map.put(名称,newsomeobject(名称,时间);
...
}

稍后,您可以在映射中搜索特定名称(
map.containsKey(名称)
map.get(名称)
),或迭代所有名称(使用
map.keySet()
).

这有点不清楚,但我认为您正在寻找的是一个
哈希映射
。如果想法是将名称和时间放入数据结构中,以便以后可以按名称搜索,那么您需要一个
哈希映射
,然后

map.put(name,times);
添加到地图。稍后,您可以使用

map.get(name);
这里有一些假设:

  • 你不在乎名字的顺序(如果你在乎的话,请参阅
    LinkedHashMap
  • 名称是唯一的(如果它们不是唯一的,请参见Guava的
    Multimap

  • 您可以创建一个自定义的
    ,将
    q1
    更改为该
    类型的列表
    ,添加元素(如果可以
    拆分

    final List<Person> q1=new LinkedList<Person>();
    
    {...other code...}
    //your code change to add to this list when split can occur  
    
    if(names.contains(":"))
    {
        splitter2 = names.split(":");
        name = splitter2[0];
        times = splitter2[1];
        System.out.printf("%s\t\t %s \n",name, times);
        q1.add(new Person(name,times); 
    }
    
    人员类别:

    public class Person {
        private String name;
        private String time;
    
        public Person(String name, String time) {
            this.name = name;
            this.time = time;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setTime(String time) {
            this.time = time;
        }
    
        public String getTime() {
            return time;
        }
    }
    
    或者,在迭代过程中,您可以像以前一样,只迭代和拆分字符串
    列表
    。前面的方法更好

    例如:

    public static void main(String[] args) {
        final String search = "george";
        List<String> q1 = new LinkedList<String>();
        q1.add("tom:120000");
        q1.add("george:130000");
        q1.add("john:120000");
        for (final String q : q1) { //for each string q in the list q1
            if (q.contains(":")) {
                final String[] split = q.split(":");
                final String name = split[0];
                final String time = split[1];
                if (name.equalsIgnoreCase(search)) {
                    System.out.println("I found " + search + "!");
                    System.out.println(name + " : " + time);
                    break;
                }
            }
        }
    }
    
    publicstaticvoidmain(字符串[]args){
    最终字符串搜索=“george”;
    列表q1=新的LinkedList();
    q1.增加(“tom:120000”);
    q1.增加(“乔治:130000”);
    q1.增加(“约翰:120000”);
    对于(最终字符串q:q1){//对于列表q1中的每个字符串q
    如果(q.contains(“:”)){
    最终字符串[]split=q.split(“:”);
    最终字符串名称=拆分[0];
    最终字符串时间=拆分[1];
    if(name.equalsIgnoreCase(搜索)){
    System.out.println(“我找到了”+搜索+”!”;
    System.out.println(name+“:”+时间);
    打破
    }
    }
    }
    }
    
    不清楚您在问什么。为什么不在列表中只添加“名称”而不是“名称”。我想同时添加名称和时间,这样名称就同时包含这两个。名称是否唯一?然后使用地图,让它们键入“名称”并值为“时间”所有姓名都是唯一的,但我被要求只使用LinkedList。但我需要将数据拆分,这样我就可以只使用人名搜索列表,而不必输入姓名和时间。@BamBam如果您只需要姓名并且必须使用LinkedList,只需将
    姓名
    添加到列表中(而不是
    姓名
    )。所有名称都是唯一的,但我被要求只使用LinkedList。但我需要将数据拆分,以便我可以只使用人名搜索列表,而不必输入名称和时间。@BamBam在这种情况下,您需要一个可以存储名称和时间的新类,以便查看列表并询问每个元素的名称。
    public class Person {
        private String name;
        private String time;
    
        public Person(String name, String time) {
            this.name = name;
            this.time = time;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setTime(String time) {
            this.time = time;
        }
    
        public String getTime() {
            return time;
        }
    }
    
    public static void main(String[] args) {
        final String search = "george";
        List<String> q1 = new LinkedList<String>();
        q1.add("tom:120000");
        q1.add("george:130000");
        q1.add("john:120000");
        for (final String q : q1) { //for each string q in the list q1
            if (q.contains(":")) {
                final String[] split = q.split(":");
                final String name = split[0];
                final String time = split[1];
                if (name.equalsIgnoreCase(search)) {
                    System.out.println("I found " + search + "!");
                    System.out.println(name + " : " + time);
                    break;
                }
            }
        }
    }