Как создать итератор, который будет возвращать только элементы, отличающиеся в Java? - PullRequest
1 голос
/ 25 января 2012

Более подробная информация о проблеме: мне нужно создать итератор для стека строк, который использует ArrayList, который возвращает только слова, которые отличаются после того, как все слова в файле сделаны строчными, и использует для этого сканер. Я должен отсортировать массив в конце. Мне нужно создать два отдельных класса для этой проблемы.

Это то, что я имею до сих пор:

import java.io.*;
import java.util.*;

 public class StackClass
 {
    static StringSet stringStack;
    static Scanner console = new Scanner(System.in);
    public static void main(String[] args)
    {


    stringStack = new StringSet();

    System.out.println("Please input the filename: ");
    String fileName = console.next();

    try {
        FileReader file = new FileReader(fileName);
        Scanner input = new Scanner(file);
        while (input.hasNext())
        {   
            input.useDelimiter("\\W");
            //lcString.toLowerCase();
              (I commented this out^ until I figure it out)
            stringStack.add(input.next());

        }
        }
    catch (FileNotFoundException e) {e.printStackTrace();}
}
 }

А вот и мой другой класс:

import java.util.*;

public class StringSet implements Iterable<String>
{
static Stack<String> stringStack;
private ArrayList<String> stackList = new ArrayList<String>();


//for loop goes through all the words in stack 
//if the word is found then ignore it, if not add it to the stack
public String add(String s)
{
    for(int i=0;i>0;i++)
    {
    stringStack.push(s);
    }
    return s;
}


public int size( int i)
{
    return stringStack.size();
}

public Iterator<String> iterator()
{return new WordIterator();}

class WordIterator implements Iterator<String>
{
    private int i=0;
    public boolean hasNext(){return i>0;}
    public String next(){return stackList<String>;}
}
}   

1 Ответ

2 голосов
/ 25 января 2012

Если проблема заключается в том, «как перебирать только уникальные слова», я просто использовал бы HashSet для слов, и когда вы помещаете слова в стек

1) Если слово находится в HashSet, не нажимайте на него. 2) Если слово отсутствует в HashSet, вставьте его и добавьте в HashSet.

Если вам нужно отслеживать количество вхождений, вы можете использовать HashMap вместо HashSet, где вы увеличиваете количество повторяющихся строк, с которыми вы сталкиваетесь.

Если вам нужно сохранить порядок и количество вхождений для чего-либо, я бы оставил отдельный неуникальный стек, в который я бы просто помещал все.

Надеюсь, я правильно понял вашу проблему.

...