とりあえず並び替えなら (for はともかく stream でも無く) List.sort で十分なのではということで。
(どうしても stream なら sorted 。)
java
1import java.util.*;
2
3public class Main {
4 public static void main(String[] args) {
5 List<Data> idDatas = new ArrayList<>();
6 idDatas.add(new Data(1, "AAA"));
7 idDatas.add(new Data(2, "BBB"));
8 idDatas.add(new Data(3, "CCC"));
9 idDatas.add(new Data(4, "DDD"));
10 idDatas.add(new Data(5, "EEE"));
11 idDatas.add(new Data(6, "FFF"));
12 System.out.println("-- idDatas ------");
13 idDatas.stream().forEach(System.out::println);
14
15 List<Long> idLists = new ArrayList<>();
16 for(Data d : idDatas) idLists.add(d.id);
17 Collections.shuffle(idLists);
18 System.out.println("-- idLists ------");
19 idLists.stream().forEach(System.out::println);
20
21 List<Data> returnList = new ArrayList<>(idDatas);
22 returnList.sort((a,b)->idLists.indexOf(a.id)-idLists.indexOf(b.id));
23 /*
24 List<Data> returnList = idDatas.stream()
25 .sorted((a,b)->idLists.indexOf(a.id)-idLists.indexOf(b.id))
26 .collect(Collectors.toList());
27 */
28 System.out.println("-- returnList ------");
29 returnList.stream().forEach(System.out::println);
30 }
31
32 private static class Data {
33 final long id;
34 final String name;
35 Data(long id, String name) {
36 this.id = id;
37 this.name = name;
38 }
39 @Override
40 public String toString() {
41 return getClass().getSimpleName()+"[id="+id+",name="+name+"]";
42 }
43 }
44}
実行結果
plain
1-- idDatas ------
2Data[id=1,name=AAA]
3Data[id=2,name=BBB]
4Data[id=3,name=CCC]
5Data[id=4,name=DDD]
6Data[id=5,name=EEE]
7Data[id=6,name=FFF]
8-- idLists ------
93
101
116
122
135
144
15-- returnList ------
16Data[id=3,name=CCC]
17Data[id=1,name=AAA]
18Data[id=6,name=FFF]
19Data[id=2,name=BBB]
20Data[id=5,name=EEE]
21Data[id=4,name=DDD]