<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="NL-BE" link="blue" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-GB">Hello all<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">I was recently thinking about cases where the new "value classes"/"primitive classes" (or whatever they'll be called) can be used. One of the common places where I learned C# devs use their structs, back when I used to
 code in C#, is in iterators. However, this is not a case we can mirror in Java, as our version of these "structs" are immutable. However there are variants that could still allow these, and I was wondering whether any thought has been given to those (or other
 variants) yet, and/or whether they are deemed not useful.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">One such variation:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">```java<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">class ArrayList<T> implements Iterable2<T> {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">    @Override<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">    public Iterator2<T> iterator2() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        return new ArrayListCursor<>(this, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">    <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">    value record ArrayListCursor<T>(ArrayList<T> list, int index) implements Iterator2<T> {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        @Override<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        public boolean hasNext() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            return index < list.size();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        @Override <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        public Tupple2<T, Iterator2<T>> moveNext() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            if (!this.hasNext()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">                throw new NoSuchElementException();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            return new Tupple2(list.get(index), new ArrayListCursor<>(list, index + 1));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        // or<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        @Override<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        public T next() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            if (!this.hasNext()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">                throw new NoSuchElementException();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            return list.get(index);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        @Override <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        Iterator2<T> moveNext() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            if (!this.hasNext()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">                throw new NoSuchElementException();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">            return new ArrayListCursor<>(list, index + 1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">```<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">Greetings<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB">Robbe Pincket<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB"><o:p> </o:p></span></p>
</div>
</body>
</html>