removing duplicates that are next to each other









up vote
0
down vote

favorite












I have a list:
private static List<Point> pointList = new ArrayList<>();.



Point = object representing a point in 3D graph.



I can compare Points with method:



@Override
public boolean equals(Object o)
if (this == o)
return true;
if (o == null


Lets say my list looks like that: a1, a2, b1, a3, c1, c2, a4



All objects are different objects (a1 =/= a2..), but have same values ( a1, a2... representing exact same point on graph)



What I want is to remove duplicated Points that are next to each other on list, so list would look like that a, b, a, c, a



I tried:



public List<Point> getUniq() 
List<Point> l = new ArrayList<>();
for (int i = 0; i < pointList.size()-1; i++)
if (pointList.get(i).equals(pointList.get(i + 1)))
l.add(pointList.get(i));


return l;



But I'm missing elements.










share|improve this question

















  • 1




    Read your code: you only add a point if an equal point follows it. That's not what you want to do. You want to add the current point to the new list if the last element you added to the list (if any) is different from the current point.
    – JB Nizet
    Nov 11 at 14:58














up vote
0
down vote

favorite












I have a list:
private static List<Point> pointList = new ArrayList<>();.



Point = object representing a point in 3D graph.



I can compare Points with method:



@Override
public boolean equals(Object o)
if (this == o)
return true;
if (o == null


Lets say my list looks like that: a1, a2, b1, a3, c1, c2, a4



All objects are different objects (a1 =/= a2..), but have same values ( a1, a2... representing exact same point on graph)



What I want is to remove duplicated Points that are next to each other on list, so list would look like that a, b, a, c, a



I tried:



public List<Point> getUniq() 
List<Point> l = new ArrayList<>();
for (int i = 0; i < pointList.size()-1; i++)
if (pointList.get(i).equals(pointList.get(i + 1)))
l.add(pointList.get(i));


return l;



But I'm missing elements.










share|improve this question

















  • 1




    Read your code: you only add a point if an equal point follows it. That's not what you want to do. You want to add the current point to the new list if the last element you added to the list (if any) is different from the current point.
    – JB Nizet
    Nov 11 at 14:58












up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have a list:
private static List<Point> pointList = new ArrayList<>();.



Point = object representing a point in 3D graph.



I can compare Points with method:



@Override
public boolean equals(Object o)
if (this == o)
return true;
if (o == null


Lets say my list looks like that: a1, a2, b1, a3, c1, c2, a4



All objects are different objects (a1 =/= a2..), but have same values ( a1, a2... representing exact same point on graph)



What I want is to remove duplicated Points that are next to each other on list, so list would look like that a, b, a, c, a



I tried:



public List<Point> getUniq() 
List<Point> l = new ArrayList<>();
for (int i = 0; i < pointList.size()-1; i++)
if (pointList.get(i).equals(pointList.get(i + 1)))
l.add(pointList.get(i));


return l;



But I'm missing elements.










share|improve this question













I have a list:
private static List<Point> pointList = new ArrayList<>();.



Point = object representing a point in 3D graph.



I can compare Points with method:



@Override
public boolean equals(Object o)
if (this == o)
return true;
if (o == null


Lets say my list looks like that: a1, a2, b1, a3, c1, c2, a4



All objects are different objects (a1 =/= a2..), but have same values ( a1, a2... representing exact same point on graph)



What I want is to remove duplicated Points that are next to each other on list, so list would look like that a, b, a, c, a



I tried:



public List<Point> getUniq() 
List<Point> l = new ArrayList<>();
for (int i = 0; i < pointList.size()-1; i++)
if (pointList.get(i).equals(pointList.get(i + 1)))
l.add(pointList.get(i));


return l;



But I'm missing elements.







java list object duplicates






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 11 at 14:54









Taknie

447




447







  • 1




    Read your code: you only add a point if an equal point follows it. That's not what you want to do. You want to add the current point to the new list if the last element you added to the list (if any) is different from the current point.
    – JB Nizet
    Nov 11 at 14:58












  • 1




    Read your code: you only add a point if an equal point follows it. That's not what you want to do. You want to add the current point to the new list if the last element you added to the list (if any) is different from the current point.
    – JB Nizet
    Nov 11 at 14:58







1




1




Read your code: you only add a point if an equal point follows it. That's not what you want to do. You want to add the current point to the new list if the last element you added to the list (if any) is different from the current point.
– JB Nizet
Nov 11 at 14:58




Read your code: you only add a point if an equal point follows it. That's not what you want to do. You want to add the current point to the new list if the last element you added to the list (if any) is different from the current point.
– JB Nizet
Nov 11 at 14:58












2 Answers
2






active

oldest

votes

















up vote
1
down vote



accepted










You basically need to keep reference to the last added object. If the object that you are currently trying to add is the same, then you should skip it.



Here is how it would look like using your code:



public List<Point> getUniq() 
List<Point> result = new ArrayList<>();
Point lastAdded = null;
for (int i = 0; i < pointList.size(); i++)
if (!points.get(i).equals(lastAdded)) // previously added point was different
lastAdded = points.get(i); // update previously added
result.add(lastAdded); // add to result


return result;






share|improve this answer




















  • This is what I needed, thanks!
    – Taknie
    Nov 11 at 15:03

















up vote
0
down vote













Your code does not seem to do what you want according to your description.




What I want is to remove duplicated Points that are next to each other
on list, so list would look like that a, b, a, c, a




The following piece of code should do the work:



public List<Point> getUniq() 
List<Point> l = new ArrayList<>();
l.add(pointList.get(0)); //the first element will always be added
for (int i = 1; i < pointList.size(); i++)
if (!l.get(l.size()-1).equals(pointList.get(i)))
l.add(pointList.get(i));


return l;






share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249916%2fremoving-duplicates-that-are-next-to-each-other%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote



    accepted










    You basically need to keep reference to the last added object. If the object that you are currently trying to add is the same, then you should skip it.



    Here is how it would look like using your code:



    public List<Point> getUniq() 
    List<Point> result = new ArrayList<>();
    Point lastAdded = null;
    for (int i = 0; i < pointList.size(); i++)
    if (!points.get(i).equals(lastAdded)) // previously added point was different
    lastAdded = points.get(i); // update previously added
    result.add(lastAdded); // add to result


    return result;






    share|improve this answer




















    • This is what I needed, thanks!
      – Taknie
      Nov 11 at 15:03














    up vote
    1
    down vote



    accepted










    You basically need to keep reference to the last added object. If the object that you are currently trying to add is the same, then you should skip it.



    Here is how it would look like using your code:



    public List<Point> getUniq() 
    List<Point> result = new ArrayList<>();
    Point lastAdded = null;
    for (int i = 0; i < pointList.size(); i++)
    if (!points.get(i).equals(lastAdded)) // previously added point was different
    lastAdded = points.get(i); // update previously added
    result.add(lastAdded); // add to result


    return result;






    share|improve this answer




















    • This is what I needed, thanks!
      – Taknie
      Nov 11 at 15:03












    up vote
    1
    down vote



    accepted







    up vote
    1
    down vote



    accepted






    You basically need to keep reference to the last added object. If the object that you are currently trying to add is the same, then you should skip it.



    Here is how it would look like using your code:



    public List<Point> getUniq() 
    List<Point> result = new ArrayList<>();
    Point lastAdded = null;
    for (int i = 0; i < pointList.size(); i++)
    if (!points.get(i).equals(lastAdded)) // previously added point was different
    lastAdded = points.get(i); // update previously added
    result.add(lastAdded); // add to result


    return result;






    share|improve this answer












    You basically need to keep reference to the last added object. If the object that you are currently trying to add is the same, then you should skip it.



    Here is how it would look like using your code:



    public List<Point> getUniq() 
    List<Point> result = new ArrayList<>();
    Point lastAdded = null;
    for (int i = 0; i < pointList.size(); i++)
    if (!points.get(i).equals(lastAdded)) // previously added point was different
    lastAdded = points.get(i); // update previously added
    result.add(lastAdded); // add to result


    return result;







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Nov 11 at 15:00









    pwolaq

    5,2101138




    5,2101138











    • This is what I needed, thanks!
      – Taknie
      Nov 11 at 15:03
















    • This is what I needed, thanks!
      – Taknie
      Nov 11 at 15:03















    This is what I needed, thanks!
    – Taknie
    Nov 11 at 15:03




    This is what I needed, thanks!
    – Taknie
    Nov 11 at 15:03












    up vote
    0
    down vote













    Your code does not seem to do what you want according to your description.




    What I want is to remove duplicated Points that are next to each other
    on list, so list would look like that a, b, a, c, a




    The following piece of code should do the work:



    public List<Point> getUniq() 
    List<Point> l = new ArrayList<>();
    l.add(pointList.get(0)); //the first element will always be added
    for (int i = 1; i < pointList.size(); i++)
    if (!l.get(l.size()-1).equals(pointList.get(i)))
    l.add(pointList.get(i));


    return l;






    share|improve this answer
























      up vote
      0
      down vote













      Your code does not seem to do what you want according to your description.




      What I want is to remove duplicated Points that are next to each other
      on list, so list would look like that a, b, a, c, a




      The following piece of code should do the work:



      public List<Point> getUniq() 
      List<Point> l = new ArrayList<>();
      l.add(pointList.get(0)); //the first element will always be added
      for (int i = 1; i < pointList.size(); i++)
      if (!l.get(l.size()-1).equals(pointList.get(i)))
      l.add(pointList.get(i));


      return l;






      share|improve this answer






















        up vote
        0
        down vote










        up vote
        0
        down vote









        Your code does not seem to do what you want according to your description.




        What I want is to remove duplicated Points that are next to each other
        on list, so list would look like that a, b, a, c, a




        The following piece of code should do the work:



        public List<Point> getUniq() 
        List<Point> l = new ArrayList<>();
        l.add(pointList.get(0)); //the first element will always be added
        for (int i = 1; i < pointList.size(); i++)
        if (!l.get(l.size()-1).equals(pointList.get(i)))
        l.add(pointList.get(i));


        return l;






        share|improve this answer












        Your code does not seem to do what you want according to your description.




        What I want is to remove duplicated Points that are next to each other
        on list, so list would look like that a, b, a, c, a




        The following piece of code should do the work:



        public List<Point> getUniq() 
        List<Point> l = new ArrayList<>();
        l.add(pointList.get(0)); //the first element will always be added
        for (int i = 1; i < pointList.size(); i++)
        if (!l.get(l.size()-1).equals(pointList.get(i)))
        l.add(pointList.get(i));


        return l;







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 11 at 15:07









        NickAth

        177112




        177112



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249916%2fremoving-duplicates-that-are-next-to-each-other%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            How to read a connectionString WITH PROVIDER in .NET Core?

            In R, how to develop a multiplot heatmap.2 figure showing key labels successfully

            Museum of Modern and Contemporary Art of Trento and Rovereto