2017-07-21 7 views
0

2つのリストを比較しています。Javaでマップ関数を使用して型キャストが機能しない8

List allUserGroups = UserBC.getAllGroupsForUser(userId, deptID); 
List<String> confUserGroups= Arrays.asList(configuredSet); 

リスト1は、GroupDataエンティティに型キャストする必要があるオブジェクトを返します。 GroupDataには複数のフィールドがあり、フィールド 'id'の1つを比較したい。だから私は、その、再び型キャストを求めp.getId()ため、

isValuePresent = allUserGroups.stream().map(p -> (GroupData) p).anyMatch(p -> confUserGroups.contains(p.getId())); 

問題があり、以下のように型キャストするマップ機能を使用していました。コンパイラは再びキャストを追加するように要求します。誰も私が何かを逃した場合はお勧めします。

EDIT1: IDは、そうでない場合は、私が使用している可能性が長いタイプのものであり((GroupData)p).getId()

EDIT2: ジョープで答えたように、コードを修正しますが、取得同じエラー

enter image description here

+1

エラーメッセージはありますか? –

+0

あなたは 'map'部分をスキップすることができます。 '((GroupData)p).getId()'のキャストを行うだけです。 – jensgram

+0

@jensgram私は自分の質問を編集しました。ここでの問題は 'id'がlong型であり、私は再びcaomparingのためにStringに変換する必要があります。ザッツなぜ私はあなたが一つの追加キャスト '.MAP(のgroupdata ::のgetId).anyMatch(configuredVipUsetGroups ::含まれている)私も、 ' isValuePresent = allUserGroups.streamことを試してみましたが、 ' –

答えて

0

List<Object> list = Arrays.asList("a","ab","abc"); 
list.stream() 
     .map(String.class::cast) // cast to String 
     .map(String::getBytes) // call getBytes on every element 
     .forEach(System.out::println); 
0

String.valueOfを追加してidを直接型キャストすると、私の問題が解決しました。

isValuePresent = allUserGroups.stream().anyMatch(p -> configuredVipUserGroups.contains(String.valueOf(((GroupData) p).getId()))); 

しかし.map(p -> (GroupData) p)型キャストすることができませんでした、なぜ私はまだだろうか。

1

両方のpは異なる変数です。 Stringクラスで例えば

allUserGroups.stream() 
    .map(GroupData.class::cast) 
    .map(GroupData::getID) 
    .anyMatch(confUserGroups.contains) 

:あなたはこのようなものを使用しようとする可能性があり

isValuePresent = allUserGroups.stream() 
    .map(GroupData.class::cast) 
    .anyMatch(p -> confUserGroups.contains(p.getId())); 

isValuePresent = allUserGroups.stream() 
    .map(GroupData.class::cast) 
    .map(GroupData::getId) 
    .anyMatch(confUserGroups::contains); 
+0

答えの最初の部分が同じエラーを投げています。 eをpに追加します。 2番目の部分では、 'GroupData型ではここに該当するgetId(Object)が定義されていません'というメッセージが表示されます。 getIdに引数がありません。 –

0

使用して鋳造は機能にそれの前にキャストする必要が含まれていません。

isValuePresent = allUserGroups.stream() 
          .map(p -> p) 
          .anyMatch(p -> confUserGroups.contains((GroupData)p.getId())); 
+0

check edit1、idがlong型でなければ((GroupData)p).getId() –

関連する問題