stream apiでmapのvalue内に含まれるオブジェクトのあるメンバ変数で降順ソートする場合どうソースを書けばよいでしょうか?
map<key,object 〉
object 内
{
string st ←ソート
}
A-pZが👍を押しています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
結果は何が欲しいのでしょうか?Mapから取り出したValueたちがソートされたList<Object>でしょうか?それかMapの中身の順序を変えたいのでしょうか?LinkedHashMapということでしょうか?
いえ、valueに含まれるobject内のメンバーの1つであるstをソートの元として並び替えです。詰め替えすれば良いのでしょうが煩雑なので、一括で行いたいです。

回答1件
0
ベストアンサー
こんな感じですかね?
java
1import java.util.*; 2 3class Playground { 4 private static class Obj { 5 public String val; 6 7 public Obj(String val) { 8 this.val = val; 9 } 10 } 11 12 public static void main(String[ ] args) { 13 Map<String, Playground.Obj> map = new HashMap(); 14 15 map.put("1", new Playground.Obj("b")); 16 map.put("2", new Playground.Obj("d")); 17 map.put("3", new Playground.Obj("a")); 18 map.put("4", new Playground.Obj("c")); 19 20 map.entrySet().stream() 21 .sorted((e1, e2) -> e1.getValue().val.compareTo(e2.getValue().val)) 22 .forEach(System.out::println); // 3(a) -> 1(b) -> 4(c) -> 2(d) の順にソートされてる 23 } 24}
MapのvalueだけのListにしたいなら↓
java
1import java.util.*; 2import java.util.stream.Collectors; 3 4class Playground { 5 private static class Obj { 6 public String val; 7 8 public Obj(String val) { 9 this.val = val; 10 } 11 } 12 13 public static void main(String[ ] args) { 14 Map<String, Playground.Obj> map = new HashMap(); 15 16 map.put("1", new Playground.Obj("b")); 17 map.put("2", new Playground.Obj("d")); 18 map.put("3", new Playground.Obj("a")); 19 map.put("4", new Playground.Obj("c")); 20 21 List<Playground.Obj> list = map.values().stream() 22 .sorted((e1, e2) -> e1.val.compareTo(e2.val)) 23 .collect(Collectors.toList()); 24 } 25}
投稿2018/09/07 14:11
編集2018/09/08 12:54総合スコア1803
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
class Playground {
private static class Obj {
public String val;
public Obj(String val) {
this.val = val;
}
}
public static void main(String[ ] args) {
Map<String, Playground.Obj> map = new HashMap();
map.put("1", new Playground.Obj("b"));
map.put("2", new Playground.Obj("d"));
map.put("3", new Playground.Obj("a"));
map.put("4", new Playground.Obj("c"));
List l=new ArrayList<>();
l= map.entrySet().stream()
.sorted((e1, e2) -> e1.getValue().val.compareTo(e2.getValue().val))
.collect(Collectors.toList());
でList<Map<String, Playground.Obj>>のリストにはなりますが、
List<Playground.Obj>のリストにすることはできますでしょうか?
今思えばめちゃくちゃ丸投げですねぇ

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。