Md. Fazle Rabbi
Md. Fazle Rabbi

Reputation: 65

I want to calculate sum of data from different object which belongs to a list

I want to sum all the data of different objects together, like they belong to a list. **outletExpansionAchievementAbRhHoBarGraphList: [ OutletExpansionAchievementAbRhHoBarGraphModel{month: 6, count: 3},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 1, count: 3},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 7, count: 2},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 2, count: 15},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 8, count: 2},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 4, count: 4},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 5, count: 5},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 3, count: 2},

OutletExpansionAchievementAbRhHoBarGraphModel{month: 9, count: 5} ]**

like outletExpansionAchievementAbRhHoBarGraphList is my list which contains 9 objects I want to sum the all count value and keep them into a variable for future use. Like sum= 3+3+2+15+2+4+5+2+5=?? This is what I tried, and sum is a global variable. How ever I have to keep in mind that it also work for double value.

     StreamBuilder<
                 Resource<OutletExpansionAchievementAbRhHoBarGraphListModel>>(
               stream: widget.bloc
                   .outletExpansionAchievementAbRhHoBarGraphListModelPublisherStream,
               builder: (_, snapshot) {
                  sum = snapshot.data?.model?.outletExpansionAchievementAbRhHoBarGraphList.fold(0.0, (sum, item) => sum! + item.count!.toDouble());
                 return snapshot.hasData &&
                        snapshot.data?.model.toString()!=null &&
                         snapshot.data?.model
                                 ?.outletExpansionAchievementAbRhHoBarGraphList !=
                             null && snapshot.data!.model!.outletExpansionAchievementAbRhHoBarGraphList.toString().isNotEmpty
                     ? DisplayGraph(
                         'Outlet Expansion',
                         Padding(
                           padding: const EdgeInsets.all(8.0),
                           child: OutletExpansionAchievementBarGraphWidget(
                               widget.bloc,
                               sortOutletExpansionBarGraph(snapshot.data?.model
                                       ?.outletExpansionAchievementAbRhHoBarGraphList ??
                                   [])),
                         ),
                         snapshot
                                 .data
                                 ?.model
                                 ?.outletExpansionAchievementAbRhHoBarGraphList
                                 .length ??
                             0,
                       )
                     : SizedBox();
               },
             ),

this is my model class

import 'package:agent_banking/base/base_model.dart';
import 'package:json_annotation/json_annotation.dart';
part 'outlet_expansion_achievement_ab_rh_ho_bar_graph_list_model.g.dart';

@JsonSerializable()
class OutletExpansionAchievementAbRhHoBarGraphListModel{
 List<OutletExpansionAchievementAbRhHoBarGraphModel> outletExpansionAchievementAbRhHoBarGraphList;
 OutletExpansionAchievementAbRhHoBarGraphListModel(
     this.outletExpansionAchievementAbRhHoBarGraphList);

 factory OutletExpansionAchievementAbRhHoBarGraphListModel.fromJson(Map<String, dynamic> json) =>
     _$OutletExpansionAchievementAbRhHoBarGraphListModelFromJson(json);

 Map<String, dynamic> toJson() => _$OutletExpansionAchievementAbRhHoBarGraphListModelToJson(this);

 @override
 String toString() {
   return 'OutletExpansionAchievementAbRhHoBarGraphListModel{outletExpansionAchievementAbRhHoBarGraphList: $outletExpansionAchievementAbRhHoBarGraphList}';
 }


}



@JsonSerializable()
class OutletExpansionAchievementAbRhHoBarGraphModel {
 OutletExpansionAchievementAbRhHoBarGraphModel({
     this.count, 
     this.month,});
 @JsonKey(name: 'MONTH')
 int? month;
 @JsonKey(name: 'COUNT')
 int? count;

 factory OutletExpansionAchievementAbRhHoBarGraphModel.fromJson(Map<String, dynamic> json) =>
     _$OutletExpansionAchievementAbRhHoBarGraphModelFromJson(json);

 Map<String, dynamic> toJson() => _$OutletExpansionAchievementAbRhHoBarGraphModelToJson(this);

 @override
 String toString() {
   return 'OutletExpansionAchievementAbRhHoBarGraphModel{month: $month, count: $count}';
 }
}

class OutletExpansionAchievementAbRhHoBarGraphListModelCreator extends BaseModelCreator<OutletExpansionAchievementAbRhHoBarGraphListModel>{
 @override
 OutletExpansionAchievementAbRhHoBarGraphListModel fromJson(Map<String, dynamic> json) {
   // TODO: implement fromJson
   throw UnimplementedError();
 }

 @override
 OutletExpansionAchievementAbRhHoBarGraphListModel fromList(List jsonList) {
   List<OutletExpansionAchievementAbRhHoBarGraphModel> list = [];
   jsonList.forEach((element) {
     list.add(OutletExpansionAchievementAbRhHoBarGraphModel.fromJson(element));
   });
   return OutletExpansionAchievementAbRhHoBarGraphListModel(list);
 }

}

Upvotes: 0

Views: 470

Answers (1)

Raul Sauco
Raul Sauco

Reputation: 2705

You should be able to use map to map your classes to the integer value that you want to add and then reduce to sum the values.

class MyClass {
  MyClass(this.month, this.count);
  
  int month;
  int count;
}



void main() {
  List<MyClass> myList = List.generate(8, (i) => MyClass(i, i+1));
  int sum = myList.map((item) => item.count).reduce((x, y) => x + y);
  print(sum);
}

That will output 36 when you run it.

I added a minimum example that you can copy and run on a Dart pad to make changes and adapt it to your needs.

Upvotes: 2

Related Questions