2016-04-05 9 views
1

に置き換えることができます私は最近、アンドロイドの開発にラムダをサポートするためにretrolambdaライブラリを使用して開始しましたし、私は、Android Studioから次の警告受信:警告:コレクトコール

は、コレクトコールで置き換えることができます。

この検査では、ストリームapi呼び出しで置き換えることができるforeachループがレポートされます。次のように

私のコードは次のとおりです。

// mGeofenceList is a List<Geofence> 
mGeofenceList = new ArrayList<>(); 
    // GeofenceUtils.GeofenceObjects.entrySet() is a HashMap<String, LatLng> 
    for (Map.Entry<String, LatLng> entry : GeofenceUtils.GeofenceObjects.entrySet()) { 
     mGeofenceList.add(new Geofence.Builder() 
       .setRequestId(entry.getKey()) 
       .setCircularRegion(
         entry.getValue().latitude, 
         entry.getValue().longitude, 
         GeofenceUtils.GEOFENCE_RADIUS_IN_METERS) 
       .setExpirationDuration(GeofenceUtils.GEOFENCE_EXPIRATION_IN_MILLISECONDS) 
       .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | 
         Geofence.GEOFENCE_TRANSITION_EXIT) 
       .build()); 
    } 

は質問:どのように私はコレクトコールでそれを置き換えることができますか?

UPDATE:

// method stream() cannot be found  
mGeofenceList.addAll(GeofenceUtils.GeofenceObjects.entrySet().stream() 
      .map(entry -> new Geofence.Builder() 
      .setRequestId(entry.getKey()) 
      .setCircularRegion(
        entry.getValue().latitude, 
        entry.getValue().longitude, 
        GeofenceUtils.GEOFENCE_RADIUS_IN_METERS) 
      .setExpirationDuration(GeofenceUtils.GEOFENCE_EXPIRATION_IN_MILLISECONDS) 
      .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | 
        Geofence.GEOFENCE_TRANSITION_EXIT) 
      // Collectors cannot be found 
      .build()).collect(java.util.stream.Collectors.toList())); 

をそして今、それはメソッドストリーム()、コレクターを解決できないことを言う:私はAltキーを押し+入力すると、それは次のようにコードを変換します。 修正できますか?いくつかのインポートステートメントを追加できますか?または、現在はretrolambdaによってサポートされていませんか?

更新:解決済み、以下の回答を参照してください。

+0

訪問このhttp://stackoverflow.com/questions/23127445/how-to-suppress-can-be-replaced-with-foreach-call -warning –

+0

@harshad、私はその答えを見て、それは私の質問とは関係がありません。 –

+1

Alt + Enterをクリックしてそれを置き換えてください –

答えて

2

ご質問ありがとうございます。このライブラリの助けを借りて、問題が解決します。Java 8の実装ではhttps://github.com/aNNiMON/Lightweight-Stream-API

Stream.of(YourCollection) をあなたの代わりにYourCollection.stream(...)を参照してくださいよ。 どちらの方法でも、Streamのインスタンスが作成されます。

このライブラリとの最終的な作業コード:

// stream() changed to Stream.of(...) as per library specs 
mGeofenceList.addAll(Stream.of(GeofenceUtils.GeofenceObjects.entrySet()) 
       .map(entry -> new Geofence.Builder() 
       .setRequestId(entry.getKey()) 
       .setCircularRegion(
         entry.getValue().latitude, 
         entry.getValue().longitude, 
         GeofenceUtils.GEOFENCE_RADIUS_IN_METERS) 
       .setExpirationDuration(GeofenceUtils.GEOFENCE_EXPIRATION_IN_MILLISECONDS) 
       .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) 

       // Collectors works without prefix 
       .build()).collect(Collectors.toList()));