本文详细介绍了Java中的Map数据结构,包括添加元素(如addEntries、update、addAll),更新操作(update、updateAll),删除(remove、removeWhere)、查找(putIfAbsent、containsKey、containsValue)以及创建和操作方法(fromIterable、fromIterables、unmodifiable)。 摘要由CSDN通过智能技术生成

Map简介

键值对的集合,您可以使用其关联的键从中检索值。
普通的 HashMap 是无序的(不保证顺序), LinkedHashMap 按键插入顺序迭代,而像 SplayTreeMap 这样的排序映射按排序顺序迭代键。

1,添加元素 addEntries()

final planets = <int, String>{1: 'Mercury', 2: 'Venus',
  3: 'Earth', 4: 'Mars'};
final gasGiants = <int, String>{5: 'Jupiter', 6: 'Saturn'};
final iceGiants = <int, String>{7: 'Uranus', 8: 'Neptune'};
planets.addEntries(gasGiants.entries);
planets.addEntries(iceGiants.entries);
print(planets);
// {1: Mercury, 2: Venus, 3: Earth, 4: Mars, 5: Jupiter, 6: Saturn,
//  7: Uranus, 8: Neptune}

2,更新组元素 update()

final planetsFromSun = <int, String>{1: 'Mercury', 2: 'unknown',
  3: 'Earth'};
// Update value for known key value 2.
planetsFromSun.update(2, (value) => 'Venus');
print(planetsFromSun); // {1: Mercury, 2: Venus, 3: Earth}
final largestPlanets = <int, String>{1: 'Jupiter', 2: 'Saturn',
  3: 'Neptune'};
// Key value 8 is missing from list, add it using [ifAbsent].
largestPlanets.update(8, (value) => 'New', ifAbsent: () => 'Mercury');
print(largestPlanets); // {1: Jupiter, 2: Saturn, 3: Neptune, 8: Mercury}

3,更新所有元素的值 updateAll()

final terrestrial = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'};
terrestrial.updateAll((key, value) => value.toUpperCase());
print(terrestrial); // {1: MERCURY, 2: VENUS, 3: EARTH}

4,删除指定的元素 removeWhere

final terrestrial = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'};
terrestrial.removeWhere((key, value) => value.startsWith('E'));
print(terrestrial); // {1: Mercury, 2: Venus}

5,查找 [key] 的值,如果不存在,则添加新条目。 putIfAbsent

final diameters = <num, String>{1.0: 'Earth'};
final otherDiameters = <double, String>{0.383: 'Mercury', 0.949: 'Venus'};
for (final item in otherDiameters.entries) {
  diameters.putIfAbsent(item.key, () => item.value);
print(diameters); // {1.0: Earth, 0.383: Mercury, 0.949: Venus}
// If the key already exists, the current value is returned.
final result = diameters.putIfAbsent(0.383, () => 'Random');
print(result); // Mercury
print(diameters); // {1.0: Earth, 0.383: Mercury, 0.949: Venus}

6,将所有键值对添加到此映射中。 addAll

final planets = <int, String>{1: 'Mercury', 2: 'Earth'};
planets.addAll({5: 'Jupiter', 6: 'Saturn'});
print(planets); // {1: Mercury, 2: Earth, 5: Jupiter, 6: Saturn}

7,从映射中删除 [key] 及其关联值(如果存在)。 remove

final terrestrial = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'




    
};
final removedValue = terrestrial.remove(2); // Venus
print(terrestrial); // {1: Mercury, 3: Earth}

8,从映射中移除所有条目。 clear

final planets = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'};
planets.clear(); // {}

9,循环应用于映射的每个键值对。 forEach

final planetsByMass = <num, String>{0.81: 'Venus', 1: 'Earth',
  0.11: 'Mars', 17.15: 'Neptune'};
planetsByMass.forEach((key, value) {
  print('$key: $value');
  // 0.81: Venus
  // 1: Earth
  // 0.11: Mars
  // 17.15: Neptune
});

10,此映射是否包含给定的 [key]。 containsKey

final moonCount = <String, int>{'Mercury': 0, 'Venus': 0, 'Earth': 1,
  'Mars': 2, 'Jupiter': 79, 'Saturn': 82, 'Uranus': 27, 'Neptune': 14 };
final containsUranus = moonCount.containsKey('Uranus'); // true
final containsPluto = moonCount.containsKey('Pluto'); // false

11,此映射是否包含给定的 [value]。 containsValue

final moonCount = <String, int>{'Mercury': 0, 'Venus': 0, 'Earth': 1,
  'Mars': 2, 'Jupiter': 79, 'Saturn': 82, 'Uranus': 27, 'Neptune': 14 };
final moons3 = moonCount.containsValue(3); // false
final moons82 = moonCount.containsValue(82); // true

12,创建一个 Map 实例,其中键和值是从 [iterable] 计算的。 fromIterable

final numbers = <int>[1, 2, 3];
final map = Map<String, int>.fromIterable(numbers,
    key: (item) => item.toString(),
    value: (item) => item * item);
print(map); // {1: 1, 2: 4, 3: 9}
final numbers = <int>[1, 2, 3];
final map = Map.fromIterable(numbers);
print(map); // {1: 1, 2: 2, 3: 3}

13,创建一个映射,将给定的 [键] 与给定的 [值] 相关联。 fromIterables

final rings = <bool>[false, false, true, true];
final planets = <String>{'Earth', 'Mars', 'Jupiter', 'Saturn'};
final map = Map<String, bool>.fromIterables(planets, rings);
print(map); // {Earth: false, Mars: false, Jupiter: true, Saturn: true}

14,创建一个映射,将给定的 [键] 与给定的 [值] 相关联。 unmodifiable

final planets = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'};
final unmodifiableMap = Map.unmodifiable(planets);
unmodifiableMap[4] = 'Mars'; // Throws
A Dart implementation of Leaflet for Flutter apps.
一个基于leaflet的地图插件,也就是说flutter_map基于的是瓦片地图,那么在兼容性上可以说比较好用了。
目前主要的地图插件主要有: flutter_map map_view``amap
void main () {
var myApp = MyApp(aMap: {0: Colors.green,1: Colors.lightBlue,2:Colors.pink,3:Colors.purple},);
return runApp(myApp);
class MyApp extends S...
本篇文章对于熟悉 flutter 或者 dart 的小伙伴来说可能觉得比较简单,但是对于初学者或者没用过的小伙伴还是有些收获的。
说到 map 妙用的发现,还要归功于 Tooltip 的研究。
在研究这个 Widget 的时候,看到了它的源码 demo,所以发现了这个 map 的妙用。
那么妙用在哪呢?
我们在上节课说到了 Expanded 的比例布局。
源代码如下:
re...
				
Flutter —— 聊天界面 首先做的事右上角的按钮,右上角要弄一个menu,那么这里可以在AppBar的actions添加Flutter封装好的控件PopupMenuButton,用一个container包着调整位置,然后用offset调整自身的位置。 actions: [ Container(child: PopupMenuButton( itemBuilder: (BuildContext context) {
Flutter —— dart基础语法(1)1. Flutter 项目创建2. Dart 语法2.1 var、final和const2.2 num2.3 string2.4 list 和 map2.5 ??= 和 ??2.6 方法 和 箭头函数2.7 方法的可选参数2.8 方法作为参数传递2.9 匿名函数2.10 闭包 1. Flutter 项目创建 Flutter配置完之后,就可以在Android studio 创建 Flutter项目啦, 点击Create New Flutter Project之后,
在这个系列中,我们将学习如何使用google的移动开发框架flutter创建一个电商应用。 本文是flutter框架系列教程的第一部分,将学习如何安装Flutter开发环境并创建第一个 Flutter应用,并学习Flutter应用开发中的核心概念,例如widget、状态等。 本系列教程包含如下四个部分,敬请期待: 如何从零构建flutter应用 如何在flutter中布局元素 如何在flutte...
Flutter在2018 世界移动大会发布第一个beta版本,这是谷歌发布的一套移动UI框架 ,可以快速在iOS和Android上构建高质量的原生用户界面。 能够做到一套代码两个终端运行。并且Flutter是完全免费、开源的。 Flutter组件采用现代响应式框架构建,这是从React中获得的灵感,中心思想是用组件(widget)构建你的UI。 组件描述了在给定其当前配置和状态时他们...
Android Studio安装与配置 https://juejin.cn/post/6844904054569582605 安装Android Studio前,需要先选择安装Java环境,Java需要到Oracle官网上下载安装,需要注册一个Oracle账号。 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html Windows 10 配置Java 环境变量 https://www.runo flutter --version Flutter 3.22.0 • channel stable • https://github.com/flutter/flutter.git Framework • revision 5dcb86f68f (3 months ago) • 2024-05-09 07:39:20 -0500 Engine • revision f6344b75dc Tools • Dart 3.4.0 • DevTools 2.34.3